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>
答案 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>