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
Run Code Online (Sandbox Code Playgroud)
我试图确保某个年龄范围之间的树给出了x橙子,但是我仍然坚持使用以下错误来引用我的elsif语句:
Orange_tree.rb:14: warning: integer literal in conditional range
Run Code Online (Sandbox Code Playgroud)
我也试过使用if大于&&小于条件的语句,有人可以解释这个错误的含义,以及如何达到我的解决方案.
你有一些问题:
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
Run Code Online (Sandbox Code Playgroud)
您应该使用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
Run Code Online (Sandbox Code Playgroud)
==:
仅当 obj 是一个范围,具有等效的开始和结束项(通过将它们与 == 进行比较)并且具有相同的 exclude_end 时才返回 true?设置为范围。
显然情况并非如此。
| 归档时间: |
|
| 查看次数: |
365 次 |
| 最近记录: |