我是Ruby的新手,我不明白为什么我会得到我的结果。
Person
类,其中我有实例变量@name
,
@age
和@weight
。在这个类中,我重写要打印的to_s方法
对象的@name
,@age
和@weight
。我有一个House类,其中有一个类型为
的对象数组
Person
(@persons
),我也有一个名为person
的方法
返回一个对象(在使用。指定的位置)
数组@persons
中的参数号),例如any_house_object.person(0)
将返回Person
对象上any_house_object
类型的对象数组的第一个对象。
class Person
def initialize(name, age, weight)
@name = name
@age = age
@weight = weight
end
def to_s
puts "Name: #{@name}"
puts "Age: #{@age}"
puts "Weight: #{@weight}"
end
end
class House
def initialize
@persons = []
end
def add_person(name, age, weight)
@persons << Person.new(name, age, weight)
end
def person(number)
@persons[number]
end
end
my_house = House.new
my_house.add_person("Patrick", "18", "65")
my_house.add_person("John", "18", "65")
puts my_house.person(0)
这个产品
Name: Patrick
Age: 18
Wight: 65
#<Person:0x5e2318>
最后,我的问题是我不明白为什么最后,当{I} puts my_house.person(0)
最后也出现#<Person:0x5e2318>
时。
答案 0 :(得分:4)
to_s
应该返回字符串,而不是将字符串输出到控制台。您的方法需要返回您正在构建的字符串:
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>
。