试图覆盖 to_s

Trying to override to_s

我是 Ruby 的新手,我不明白为什么我会得到这样的结果。

这个产品

    Name: Patrick
    Age: 18
    Wight: 65
    #<Person:0x5e2318>

最后,我的问题是,我不明白为什么最后,当我这样做的时候puts my_house.person(0)也出现在最后#<Person:0x5e2318>

to_s 应该是 return 一个字符串,而不是输出一个字符串到控制台。您的方法需要 return 您正在构建的字符串:

def to_s
  "Name: #{@name}\nAge: #{@age}\nWeight: #{@weight}"
end

其次,to_s用于将对象转换为字符串。您实际上并没有在任何地方。只是调用 puts <object>to_s 没有任何关系。

如果你想输出对象的字符串表示,你要么需要...

puts my_house.person(0).to_s

或者,您还需要定义自定义 inspect 方法并使用 p <object> 代替。