【问题标题】:Is there an "&& Equals" operator in RubyRuby 中是否有“&& Equals”运算符
【发布时间】:2017-01-09 08:21:18
【问题描述】:

我经常发现自己在做这样的事情:

do_something if x && x == y

在其他工作中,如果x不为nil,并且它的值为y,则做一些事情。

如果我能做这样的事情就好了:

do_something if x &&== y

有这样的运营商吗?


对 cme​​ts 的回应:


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]

标签: ruby operators


【解决方案1】:

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

见:What does &. (ampersand dot) mean in Ruby?

【讨论】:

  • 谢谢@hakcho。这看起来像我正在寻找的东西。 x &.== y。你知道&. 操作符记录在哪里吗?我在 ruby​​-docs 中找不到它
  • @ReggieB Calling Methods 包含一个简短的说明:"您可以使用&. 指定一个接收者,然后my_method 不会被调用,结果是nil 当接收者是nil。在这种情况下,不会评估my_method 的参数。"
猜你喜欢
  • 2014-10-17
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 2014-11-04
  • 2016-03-29
  • 2011-05-04
  • 2020-07-27
  • 2012-09-03
相关资源
最近更新 更多