ruby - Ruby 中的 `|=` 什么时候有用?

标签 ruby

今天我第一次看到 |=,我正在尝试了解它的工作原理以及它何时有用。

一些实验表明:

var |= nil
# => false
var |= false
# => false
var |= true
# => true
var |= 1
# => true
var |= nil
# => true
var |= false
# => true
var
# => true

Found in Github's html-pipeline gem .

  def link_to_mentioned_user(login)
    result[:mentioned_usernames] |= [login]
    url = File.join(base_url, login)
    "<a href='#{url}' class='user-mention'>" +
    "@#{login}" +
    "</a>"
  end

我假设 |= 的工作方式类似于 ||= 的 protected 赋值,但将表达式的返回值强制转换为 bool 值。 这意味着只要 var 是假的或未定义的,表达式就会被计算,返回值会被转换为 bool 值。一旦 var |= some_truthy_expression 被调用,var 将为 true 并进一步调用 var |= expression_will_not_be_called不会计算表达式。

  1. 它是这样工作的吗,在 Ruby 文档中哪里可以找到 |=
  2. |=什么时候可以派上用场?

最佳答案

对于给定的运算符op,类似于:

a op= b

或多或少是以下内容的简写:

a = a op b

当然,| 的含义取决于您使用的是什么|:

在你的情况下:

result[:mentioned_usernames] |= [login]

您可能正在使用数组,RHS 上的数组是赠品。结果是 result[:mentioned_usernames] 将添加 login 如果它不存在的话。还有一个副作用:|= 将从 result[:mentioned_usernames] 中删除重复项;例如:

>> a = [1,2,3,4,4]
=> [1, 2, 3, 4, 4]
>> a |= [1]
=> [1, 2, 3, 4]

关于ruby - Ruby 中的 `|=` 什么时候有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18091701/

相关文章:

用于 Mathematica 嵌套函数的 Ruby Eqv?

ruby-on-rails - 你如何在 rails 3.1 中删除 `references` 列?

ruby-on-rails - 如何从activeadmin中的资源获取评论集合?

ruby - 在第一个选择列表( Mechanize 和 Ruby)中选择一个选项后,第二个选择列表表单字段中的选项为空

ruby - 新手ruby代码的神秘错误(while循环)

ruby-on-rails - Rails - 如何对每个方法执行一个方法调用,就像 Controller 对 `render` 所做的那样

Ruby - Array.join 与字符串连接(效率)

ruby - 如何使用 Ahoy gem 跟踪其他帖子数据?

ruby-on-rails - 复合模型名称问题

ruby - 使用 Ruby 将单词分解为字母