我正在编写一个返回用户年龄的方法。我有很多问题与一个错误,我不明白。内容如下:
(eval):1: (eval):1:未初始化的常量Date (NameError)
我已经创建了一个类Age < Date
,以便我也可以使用Date模块中的所有方法。我一直遇到的问题是我的in_seconds
方法如下:
def in_seconds
current = Time.now
bday = Date.new(year, month, day) # this is the birthday of the user
age = (current - bday).to_s
return "You are #{age} years old."
end
我正在考虑修改initialize
方法以包括参数(YYYY, MM, DD)
,以便我可以为每个用户保留一个运行的生日日期,如下所示:
John = Age.new(1985, 04, 27)
# sets @age to 910,993,128 seconds
Angela = Age.new(1991, 03, 15)
# sets @age to 725,405,928 seconds
我最大的问题是,我似乎无法摆脱上面的错误。Ruby不断抛出一个事实,即存在一个未初始化的常量。常数是什么?经过几个小时的研究,我完全没有头绪。我怎样才能弥补这个错误呢?
我不确定您是否可以从时间中减去日期。我建议使用Time.new
来获得bday
变量。这也将消除你的错误——@MarkThomas关于需要这个库的观点是正确的。
不清楚为什么Age需要成为Date(或Time)的子类来做你想做的事情。如果您将此方法添加到任何对象,它将以秒为单位计算日期和现在之间的时间:
def in_seconds(year, month, day)
back_then = Time.new(year, month, day)
seconds_since_then = Time.now - back_then
end
我已经找到了解决这个问题的方法,这要感谢Steve Rowley提出的不能比较Date对象和Time对象的建议。我决定只使用Time对象将年龄转换为整数,如下所示:
require 'time'
class Age
def initialize(year, month, day)
# the parameters are assumed to be integers
@age = Time.parse("#{year}-#{month}-#{day}").to_i
end
def in_sec
return Time.now.to_i - @age
end
end
到目前为止,我没有任何问题。似乎最大的问题是来自使用Date
模块。
umm
date.to_time.to_i
将其转换为1970年1月1日之后的秒数