我想回归" true"如果速度低于40或超过60,否则为假。
这是我的代码:
def not_safe?(speed)
if speed < 40 || speed > 60 ? true : false
end
end
并且出现了错误:
Failure/Error: expect(answer).to eq(false)
expected: false
got: nil
(compared using ==)
我尝试将每个参数放在括号内,以及使用&#34; true&#34;和&#34;假&#34;作为字符串。
答案 0 :(得分:2)
您不需要if
。它应该是这样的:
def not_safe?(speed)
speed < 40 || speed > 60 ? true : false
end
irb(main):027:0> not_safe? 30
=> true
irb(main):028:0> not_safe? 50
=> false
正如engineermnky指出的那样,这里不需要使用三元运算符,因为表达式求值为布尔值。所以你需要的就是:
def not_safe?(speed)
speed < 40 || speed > 60
end
答案 1 :(得分:2)
由于Ruby方法将返回最后一个表达式的结果,在这种情况下,您可以简单地依赖表达式的布尔结果作为返回值。重写方法的惯用方法是:
def unsafe? speed
speed < 40 || speed > 60
end
这就是你所期望的:
unsafe? 10
#=> true
unsafe? 50
#=> false
unsafe? 70
#=> true
这既易于阅读又更具惯用性,并减少了代码中不必要的混乱。此外,将变量重命名为 unsafe?会使其更自然,并且在表达诸如not_safe? 50 #=> false
之类的想法时减少对双重否定的混淆。