Ruby中是否有“&& Equals”运算符

时间:2016-09-01 12:32:56

标签: ruby operators

我经常发现自己这样做:

do_something if x && x == y

在其他作品中,如果x不为零,则执行某项操作,其值为y

如果我可以做这样的事情会很好:

do_something if x &&== y

是否有运营商这样做?

回应评论:

x == y - 问题在于,如果已知y的值,它只测试存在(不是nil)。如果y本身为nil,则检查失败。所以你最终可能会这样做:

y && x == y

x ||= y - 如果y为零,则会将x的值分配给x。那不是我想要的。 x &&= y因同一原因无效 - 如果x存在,它会将y的值更改为x

示例:在我当前的场景中,我想检查用户是否已将与其关联的令牌传递给控制器​​,但我还想确保已分配令牌。类似的东西:

do_something if user.token && user.token == params[:token]

1 个答案:

答案 0 :(得分:5)

如果您使用ruby> 2.3.0您可以使用&.运算符:x&.== y。它基本上执行.tryRails中执行的操作,如果操作数的值不同于nil它调用方法并返回其结果。如果值为nil,则会返回nil,因此您可以执行以下操作:do_i_exist&.does_the_result_exist&.nil?

请参阅:What does &. (ampersand dot) mean in Ruby?