def Summer
@summer = true
puts "Your fruit are ripe for the picking."
if @tree_age == 1..5 && @tree_age > 0
@oranges = 5
elsif @tree_age == 6..15
@oranges = 20
else
@oranges = 50
end
end
我正在努力确保某个年龄范围之间的树提供x个橙子,但是我仍然坚持使用以下错误来引用我的elsif声明:
Orange_tree.rb:14: warning: integer literal in conditional range
我也试过使用if大于&&如果没有条件陈述,请有人解释一下这个错误意味着什么,以及如何达到我的解决方案。
答案 0 :(得分:8)
你有一些问题:
elsif @tree_age == 6..15
的方式与您预期的不同 - 它将其视为(1 == 6)..15
,而false..15
显然没有任何意义。(1..5) === num
,而不是num == (1..5)
。 Range#===
被定义为测试Range
包括右侧,而Fixnum#==
和Fixnum#===
都测试右侧是数字上等效的。 @tree_age > 0
。您已经在1..5
中测试了它。您还可以考虑使用case
语句,这可能更容易阅读。 case
使用===
进行比较。
@oranges = case @tree_age
when 1..5 then 5
when 6..15 then 20
else 50
end
答案 1 :(得分:4)
问题在于使用范围说出==的行。
if ( 10 == 1..11) # throws integer literal in conditional range warning
puts "true"
end
如果你这样做了
if ( 10.between?(1, 11))
puts "true"
end
答案 2 :(得分:4)
您应该使用include?
代替==
来确定给定的数字是否在范围内:
def Summer
@summer = true
puts "Your fruit are ripe for the picking."
if (1..5).include?(@tree_age) && @tree_age > 0
@oranges = 5
elsif (6..15).include? @tree_age
@oranges = 20
else
@oranges = 50
end
end
==
:
仅当obj是Range,具有等效的begin和end时才返回true 项目(通过将它们与==进行比较),并具有相同的exclude_end? 设置为范围。
显然情况并非如此。