Сегодня я видел |=
в первый раз, и я пытаюсь понять, как это работает и когда это может быть полезно.Когда `` = `в 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
Я предполагаю, что |=
работает как охраняемом раскладка с ||=
, но отбрасывает возвращаемое значение expession быть назначен булево. Это означает, что если var
является ложным или неопределенным, выражение получает оценку и присваивается возвращаемое значение, присвоенное булеву. Как только вызывается var |= some_truthy_expression
, var
будет true
, и дальнейшие звонки в var |= expression_will_not_be_called
не будут оценивать выражение.
- Работает ли это так, где можно найти
|=
в Ruby docs? - Когда может понадобиться
|=
?
Я думаю, что вопрос сводится к части 1. Если это будет так, короткая резка избыточных оценок будет «удобной», верно? – Thilo
Добавлена неправильная ссылка раньше. Это примерно OR или сокращенное присвоение http://stackoverflow.com/q/8569039/422353 – madth3