Элегантный способ назначения в рубине - PullRequest
0 голосов
/ 04 февраля 2010

Есть ли более элегантный способ сделать эту логику в ruby ​​

a = nil #=> obviously 'a' can have value but I am just setting it nil to make the eg more clear
b = a
unless b
  b = "value"
end

так, чтобы у нас было значение b, установленное в конце. Мы могли бы иметь другой вариант кода выше, например,

a = nil
b = a
b ||= "value"

и я также могу использовать троичное выражение, чтобы написать приведенный выше код, например

b = a ? a : "value"

но если вы замените переменную a и "значение" длинной строкой кода, то этот троичный оператор тоже начнет выглядеть ужасно.

Может ли приведенная выше логика быть как-то более элегантной / выразительной или мы ограничены только вышеперечисленными решениями?

Ответы [ 3 ]

10 голосов
/ 04 февраля 2010

Вы почти ответили на свой вопрос самостоятельно.

b = a
b ||= "value"

можно сократить до

b = a || "value"
2 голосов
/ 04 февраля 2010

b ||= "value" очень похож на популярные операторы Perl // и //=, потому что в Ruby единственное, что проверяет false, это nil (и, ну, в общем, false). Это делает его функционально идентичным оператору Perl //=. Насколько «элегантнее» вы можете получить, чем a ||= b? Честно говоря, я не знаю, насколько более компактно эта идея может быть передана, кроме как сделать оператора короче (а в этот момент вы просто глупы).

1 голос
/ 04 февраля 2010

Мне не нравится использовать ||Оператор по причине Фаррел указал в ответе иб.Это может быть прямо здесь, но я всегда боюсь, что это однажды сбьет меня с толку.Так что я боюсь, что склоняюсь к довольно пешеходному:

b = "value"; b = a unless a == nil

Не очень, я знаю, но безопасно и очень, очень явно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...