Ruby 如何更改对象的显示方式?
在这个脚本中,我获取用户输入,将其传递给一个对象,然后将该对象推送到数组中。然后我迭代该数组:Ruby 如何更改对象的显示方式?,ruby,inspect,Ruby,Inspect,在这个脚本中,我获取用户输入,将其传递给一个对象,然后将该对象推送到数组中。然后我迭代该数组: objects_array = Array.new class Object def initialize(fname) @first_name = fname end end fname = gets.chomp user_first = Object.new(fname) objects_array << user_first objects_array.each
objects_array = Array.new
class Object
def initialize(fname)
@first_name = fname
end
end
fname = gets.chomp
user_first = Object.new(fname)
objects_array << user_first
objects_array.each {|x| print x}
但我没有检索到这些结果。我接收的不是对象字符串,而是内存位置:
#<Object:0x26f00b8>
#
我在引用位于数组中的对象的信息时遇到问题。我需要更改什么才能接收数组中对象的信息而不是内存位置?如果没有适当的
to\u s
方法,Ruby无法以良好的方式打印对象(以字符串形式显示)。如果没有to_s
方法,那么Ruby的回退是一个内部方法,它只接受类名和对象id
您需要在模型中添加一个to_s
方法:
class Object
def initialize(fname)
@first_name = fname
end
def to_s
@first_name
end
end
为什么您认为打印对象会特别打印它的
@first\u name
?如果你有@foo=“foo”@bar=“bar”@baz=“baz”@您定义中的first_name=fname
?它是否应该打印“foo”?或“条形图”
?或“foo bar”
,或。。。哪一个?或者,如果您的对象没有实例变量@first\u name
,那么它应该不打印任何内容吗?
class Object
def initialize(fname)
@first_name = fname
end
def to_s
@first_name
end
end