Arrays 为什么Ruby代码显示数组的十六进制代码而不是输入?

Arrays 为什么Ruby代码显示数组的十六进制代码而不是输入?,arrays,ruby,class,Arrays,Ruby,Class,Ruby给我的是十六进制代码,而不是数组中的值。这是一个更大的问题,我使用嵌套类查找牙医预约的日期,我相信我在代码中将问题缩小到了这一点。我把它复制到另一个编译器中,看看它是否是这样的。不知道我错过了什么。为什么它给出我的十六进制而不是“描述,月,日,年” 默认情况下,#to#s打印对象的类和对象id的编码。一个选项是,放置数组。按照@Will Richardson的建议检查。另一个选项是覆盖默认的#to#行为: class Appointment attr_accessor :desc,:

Ruby给我的是十六进制代码,而不是数组中的值。这是一个更大的问题,我使用嵌套类查找牙医预约的日期,我相信我在代码中将问题缩小到了这一点。我把它复制到另一个编译器中,看看它是否是这样的。不知道我错过了什么。为什么它给出我的十六进制而不是“描述,月,日,年”

默认情况下,#to#s打印对象的类和对象id的编码。一个选项是,
放置数组。按照@Will Richardson的建议检查
。另一个选项是覆盖默认的#to#行为:

class Appointment
  attr_accessor :desc,:month,:day,:year

  def initialize(desc, month, day, year)
    @desc = desc
    @month = month
    @day = day
    @year = year
  end

  # Example override
  def to_s
    "#{desc} on #{month}/#{day}/#{year}"
  end
    
end
然后

将输出

Description on 6/18/1998
不过,作为一个补充,您可能需要研究用于存储月、日和年的ruby Date或DateTime类

日期:


DateTime:

虽然Joshua Pereira提供的答案是正确的,但这里有另一种方法可能会对您有所帮助

您定义了一个类,但没有告诉该类“如何显示自身”,即您没有提供一个
to_s
方法。你当然可以在你的类中定义这样一个方法

def to_s
  "Appointment: #{desc} #{month} #{day} #{year}"
end
但是,由于您的
约会
类似乎主要是4个值的容器,因此您也可以通过

Appointment=Struct.new(:desc, :month, :day, :year)
一个优点是,这会自动为您创建一个。例如,下面的代码

arr1 = Appointment.new("Description", 6, 18, 1998)
puts arr1
生成输出:


#

这是调用类(即
)的
时的默认输出-如果要转储成员变量,请尝试
放置数组。检查
尝试以下操作:
arr1.desc#=>“Description”;arr1.6个月#=>6个月;arr1.day#=>18;arr1.year#=>1998
。谢谢你的帮助,我很快会看一看,然后回来。我很感激。谢谢你的帮助。我也会看看你的答案,看看是否有帮助。我很感激
Appointment=Struct.new(:desc, :month, :day, :year)
arr1 = Appointment.new("Description", 6, 18, 1998)
puts arr1