Есть ли какая-либо мудрость позади “и”, “или” операторы в Ruby?

Если Вы знаете, как Ваш компилятор C++ искажает имена, да.

, Если, я не предполагаю, это - виртуальная функция. Но тогда, если Вы знаете, как Ваш компилятор C++ создает VTABLE...

Редактирование: смотря на другие ответы, я понимаю, что неправильно читал вопрос и думал, что это было о функциях членства, не членских данных. Однако точка все еще стоит: если Вы знаете, как Ваш компилятор размечает данные, то можно получить доступ к тем данным.

10
задан Marc-André Lafortune 12 July 2010 в 04:46
поделиться

5 ответов

Я предполагаю, что это прямой перенос из Perl. Операторы или и и были добавлены позже в Perl 5 для конкретных ситуаций, когда был желателен более низкий приоритет.

Например, в Perl мы хотим, чтобы || имел более низкий приоритет, поэтому мы могли написать:

try to perform big long hairy complicated action     || die ;

и быть уверенными, что || не собирался поглощать часть действия. Perl 5 представил или , новую версию || , которая имеет низкий приоритет, именно для этой цели.

Пример на Ruby, где вы могли бы использовать или ], но не || :

value = possibly_false or raise "foo"

Если вы использовали || , это будет синтаксическая ошибка.

15
ответ дан 3 December 2019 в 14:25
поделиться

Разница в приоритете. || , && имеют более высокий приоритет, чем = , но и , или имеют более низкий приоритет. Итак, пока вы можете сделать:

a = nil || 0

Вам нужно будет сделать:

a = (nil or 0)

, чтобы получить тот же эффект. Если вы это сделаете:

a = nil or 0

Результатом выражения все равно будет 0, но значение будет равно нулю.

8
ответ дан 3 December 2019 в 14:25
поделиться

У них очень низкий приоритет, поэтому операнды не нужно заключать в круглые скобки, как это иногда бывает с && и || .

5
ответ дан 3 December 2019 в 14:25
поделиться

Being able to control the precedence of your operators is sometimes useful, especially if you are concerned with readability -- extra parenthesis in conditional statements can sometimes obscure the actual logic.

To be frank, though, I think the reason Ruby has the boolean operator precedence levels it does stems mostly from the fact that Matz was a Perl programmer before he ever wrote Ruby, and borrowed much of the core syntax and operators from that language.

4
ответ дан 3 December 2019 в 14:25
поделиться

Я считаю, что идея состоит в том, чтобы получить их ниже операторы присваивания,

2
ответ дан 3 December 2019 в 14:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: