Ruby代码如何显示十六进制代码而不是输入?

时间:2020-10-22 01:43:14

标签: arrays ruby class

Ruby给了我十六进制代码,而不是给我的数组赋值。这是更大的事情中的主要问题,在该问题中,我使用嵌套类来查找牙医约会的日期,并且我相信我将代码中的问题缩小了。我将其复制到另一个编译器中,看是否确实如此。不知道我在这里想念的是什么。为什么用十六进制代替“ desc,月,日,年”?

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

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

arr1 = Appointment.new("Description", 6, 18, 1998)
array = [arr1]
puts array

输出ruby main.rb #<Appointment:0x0000558dc54650e8>

2 个答案:

答案 0 :(得分:1)

默认情况下,#to_s打印对象的类和对象ID的编码。一种选择是@Will Richardson建议的puts array.inspect。另一个选择是覆盖默认的#to_s行为:

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

然后

arr1 = Appointment.new("Description", 6, 18, 1998)
array = [arr1]
puts array

将输出

Description on 6/18/1998

尽管有一点说明,您还是可以查看ruby Date或DateTime类来存储月,日和年。

日期:https://ruby-doc.org/stdlib-2.6.1/libdoc/date/rdoc/Date.html

DateTime:https://ruby-doc.org/stdlib-2.6.1/libdoc/date/rdoc/DateTime.html

答案 1 :(得分:1)

虽然约书亚·佩雷拉(Joshua Pereira)提供的答案是正确的,但这是另一种可能会有所帮助的方法。

您定义了一个类,但是不告诉该类“如何显示自身”,即您没有提供public static final String DEFAULT_DATE_FORMAT_PATTERN = "yyyy-MM-dd"; public static final String DEFAULT_DATE_TIME_FORMAT_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS"; public static final String DATE_TIME_MINUTES_ONLY_FORMAT_PATTERN = "yyyy-MM-dd HH:mm"; public static final String DATE_TIME_WITHOUT_MILLIS_FORMAT_PATTERN = "yyyy-MM-dd HH:mm:ss"; Epoch in milli 方法。您当然可以在类中定义这样的方法,

to_s

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

Appointment

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

to_s

产生输出:

#<结构约会desc =“ Description”,month = 6,day = 18,year = 1998>

相关问题