试图覆盖 to_s
Trying to override to_s
我是 Ruby 的新手,我不明白为什么我会得到这样的结果。
- 我有一个
Person
class,其中我有实例变量 @name
,
@age
和 @weight
。在这个 class 中,我重写了 to_s 方法来打印
对象的 @name
、@age
和 @weight
。
我有一个房子class,里面有一个
类型的对象数组
Person
(@persons
),而且我还有一个名为 person
的方法
returns 一个对象(在指定的位置
数组 @persons
中的参数编号),例如 any_house_object.person(0)
return 将是 any_house_object
对象上 Person
类型对象数组的第一个对象。
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>
最后,我的问题是,我不明白为什么最后,当我这样做的时候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>
代替。
我是 Ruby 的新手,我不明白为什么我会得到这样的结果。
- 我有一个
Person
class,其中我有实例变量@name
,@age
和@weight
。在这个 class 中,我重写了 to_s 方法来打印 对象的@name
、@age
和@weight
。 我有一个房子class,里面有一个
类型的对象数组Person
(@persons
),而且我还有一个名为person
的方法 returns 一个对象(在指定的位置 数组@persons
中的参数编号),例如any_house_object.person(0)
return 将是any_house_object
对象上Person
类型对象数组的第一个对象。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>
最后,我的问题是,我不明白为什么最后,当我这样做的时候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>
代替。