时间变量未在这些方法中的某处传递

时间:2015-11-22 23:30:40

标签: ruby variables time arguments

代码运行后没有出现任何错误消息,我在发布之前已经解决了所有这些问题。这只是一个简单的问候,有一些方法,它考虑当前时间并询问用户的名字,但由于某种原因,时间变量应该在问候语中。这是我的Ruby代码:

What is your name?
Ruby
Good , Ruby
!

这是结果输入和输出:

`require': cannot load such file -- bundler (LoadError)

对我来说似乎是不透明的,但我必须遗漏一些东西。非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

您的条件不考虑2小时,3小时,12小时或18小时,因为它们都是独家检查。在任何一个小时内,您都会看到您描述的输出。

答案 1 :(得分:1)

正如Greg Beech正确指出的那样,有些时间是错误的,因为你的条件排除了它们。例如,您的第一个条件为current_hour < 12,第二个条件为current_hour > 12,但如果current_hour 等于 12则不符合这些条件。要解决此问题,请将第一个条件中的比较运算符替换为<=,或者将第二个条件替换为>=

def greeting(name)
  current_hour = determine_current_hour

  if current_hour >= 3 && current_hour < 12
    time = "morning"
  elsif current_hour >= 12 && current_hour < 18
    time = "afternoon"
  elsif current_hour >= 18 || current_hour < 3
    time = "evening"
  end

  puts "Good #{time}, #{name.capitalize}!"
end

但这非常冗长。我可以建议使用Ruby的多功能case构造更加惯用的方法吗?

def current_day_part
  case Time.new.hour
    when 3..11 then "morning"
    when 12..17 then "afternoon"
    else "evening"
  end
end

def greeting(name)
  puts "Good #{current_day_part}, #{name.capitalize}!"
end