如何在方法(if语句)中使用ruby时间函数?

How to use the ruby time function in a method (if statement)?

嗨,我正在做这个问题,它没有通过自动化测试,我很想知道我哪里出错了?非常感谢。

问题: hello 函数 Should return (not puts) 'Good morning!' 在 09:00 和 12:00 之间并且 'Good afternoon!' 在 12:00 和 16:00 之间并且 'Hello!' 所有其他时间

def hello
    t = Time 
    if t = (0900..1200)
        return 'Good morning!'
    elsif t = (1201..1600)
        return 'Good afternoon!'
    else
        return "Hello!"
    end
    
end
hello 

这看起来像是一项作业,所以我会尽力不只是给出答案。您的代码中存在一些误解和不正确的语句,导致它按原样运行。

t = Time 将 class Time 分配给 t,它不生成时间。您可以使用 irb 甚至在线 REPL 来实时了解有关变量所含内容的更多信息。

t = Time
t       #=> Time
t.class #=> Class
 

您应该查看 ruby Time class,您会对方法 #new#now 和潜在的 #parse.

您的 if 语句没有检查相等性,而是将 运行ge 个整数分配给 t。 运行ge 是一个真值,所以如果代码 运行 第一个条件总是为真。 运行ge 语法不正确,前导零使 ruby 认为此数字是八进制,仅支持数字 0-7。

t = (0900..1200) #=> Error, it thinks 0900 is an invalid Octal
t = (900..1200)
t                #=> 900..1200
t.class          #=> Range

对于这个领域,您需要更加熟悉 = 赋值和 == 相等之间的区别。还值得注意的是,integerstime 不同的 classes,因此您不能将原始时间与 运行ge 进行比较整数。

修复时间生成和时间比较应该让您走上通过测试的正确道路。