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