【发布时间】:2017-01-09 08:21:18
【问题描述】:
我经常发现自己在做这样的事情:
do_something if x && x == y
在其他工作中,如果x不为nil,并且它的值为y,则做一些事情。
如果我能做这样的事情就好了:
do_something if x &&== y
有这样的运营商吗?
对 cmets 的回应:
x == y - 问题在于,如果y 的值已知,它只会测试存在(而不是 nil)。如果y 本身就是nil,则检查失败。所以你最终可能会这样做:
y && x == y
x ||= y - 如果x 为nil,这会将y 的值分配给x。这不是我要找的。 x &&= y 也因同样的原因不起作用 - 如果存在 x,它会将 x 的值更改为 y。
一个例子:在我当前的场景中,我想检查用户是否已将与他们关联的令牌传递给控制器,但我也想确保令牌已被分配。类似的东西:
do_something if user.token && user.token == params[:token]
【问题讨论】:
-
如果 x 有一个值,这意味着它 (x) 存在,所以我认为它是不必要的。由于不必要,没有这样的运算符。
-
假设
y有一个值,你可以写... if x == y -
x ||= y应该可以,不是吗? -
@MuntasirAlam 是一个 assignment 运算符,OP 正在寻找 comparison 运算符,即
==,而不是=。跨度> -
@Stefan 在我当前的场景中,我想检查用户是否已将与他们关联的令牌传递给控制器,但我还想确保已分配令牌。类似
if user.token && user.token == params[:token]