Ruby中是否有"&& Equals"运算符?

3

我经常会像这样做:

do_something if x && x == y

在其他工作中,如果 x 不是 nil 并且它的值为 y,则执行某些操作。
如果可以的话,像这样做会很好:
do_something if x &&== y

有没有一种操作符可以做到这一点?


对评论的回应:


x == y - 这种方式的问题在于,只有在已知y的值时才测试其是否存在(非nil)。如果y本身是nil,那么检查失败。因此,你可能会这样做:

y && x == y
x&& x.token == token

In this case, if x is nil, the statement will evaluate to false and won't check x.token == token. I want a way to ensure that both conditions are met without writing an if statement like:

if x && x.token == token # do something end
do_something if user.token && user.token == params[:token]

如果x有一个值,那么它(x)是存在的,所以我认为这是不必要的。 由于不必要,因此没有这样的运算符。 - marmeladze
1
假设 y 已经有了一个值,你可以直接写成 ... if x == y - Stefan
@MuntasirAlam,那是一个"赋值"运算符,而这个题目所需要的是一个"比较"运算符,即==,而不是= - Stefan
啊,我明白了。谢谢! - Muntasir Alam
1
@Stefan 在我的当前场景中,我想检查用户是否已将与其关联的令牌传递给控制器,但我还想确保该令牌已被分配。类似于 if user.token && user.token == params[:token] 这样的东西。 - ReggieB
显示剩余5条评论
1个回答

6
如果您使用的是大于Ruby 2.3.0版本,那么您可以使用"&."操作符:x&.== y。如果操作数的值不为nil,它会调用该方法并返回其结果,这基本上就像Rails中的.try一样。如果该值为nil,则返回nil,因此您可以进行如下操作:do_i_exist&.does_the_result_exist&.nil?
参见:Ruby中的&.(ampersand dot)是什么意思?

谢谢@hakcho。那看起来就是我需要的。x &.== y。你知道&.运算符在哪里有文档吗?我在ruby-docs中找不到它。 - ReggieB
1
@ReggieB 调用方法 包含一个简短的说明:_"您可以使用 &. 来指定接收器,当接收器为 nil 时,my_method 不会被调用,结果为 nil。在这种情况下,my_method 的参数不会被评估。"_ - Stefan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接