gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 08:20:31 24 4
gpt4 key购买 nike

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

一些实验表明:

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/

24 4 0