今天我第一次看到 |=
,我正在尝试了解它的工作原理以及它何时有用。
一些实验表明:
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
不会计算表达式。
- 它是这样工作的吗,在 Ruby 文档中哪里可以找到
|=
? |=
什么时候可以派上用场?
最佳答案
对于给定的运算符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/