有时,您希望使用if
/ unless
修饰符,但有条件执行的部分包含要在条件中定义的局部变量。例如,
a = [1, 2, 3]
n = 3*(x**2) + 4*x + 5 if x = a[2]
m = 6*(y**2) + 7*y + 8 unless (y = a[0]).zero?
会给出解析错误,因为在x
/ y
修饰符之前会读取if
,unless
。为了避免这种情况,我认为使用and
代替if
和or
代替unless
非常常见(至少对我而言):
x = a[2] and n = 3*(x**2) + 4*x + 5
(y = a[0]).zero? or m = 6*(y**2) + 7*y + 8
除了它没有引发错误之外,还有什么区别吗?这样做会有副作用吗?并且,有更好的方法吗?
答案 0 :(得分:2)
出现此问题时我会选择(并已使用过)的替代方案:
if x=a[2]
n = 3*(x**2) + 4*x + 5
end
if x=a[2] then n = 3*(x**2) + 4*x + 5 end
x=nil
n = 3*(x**2) + 4*x + 5 if x=a[2]
答案 1 :(得分:0)
逻辑或如果其中一方评估为真,则返回true ...
您确定or
和unless
行是否相等
(可能是or
行始终评估为真,因为m = 6*(y**2) + 7*y + 8
为真)?
编辑:
nope我错了看看this doc - 似乎是你在找什么
答案 2 :(得分:0)
我刚才意识到
之间存在差异if x = something then f(x) end (1)
和
x = something and f(x) (2)
这是something
获取值false
的时间。在这种情况下,(1)返回nil
,而(2)返回false
。