Почему разные операторы имеют разную ассоциативность?
-
08-10-2019 - |
Вопрос
Я попал в раздел на операторах в Язык программирования Ruby, И это заставило меня подумать о ассоциативности оператора. Это не вопрос рубирования, кстати - это относится ко всем языкам.
Я знаю, что операторы должны связать свой путь или другой, и я вижу, почему в некоторых случаях один из способов был бы предпочтительнее для другого, но я изо всех сил пытаюсь увидеть большую картину. Существуют ли некоторые критерии, которые используют языковые дизайнеры для решения того, что следует слева направо и что должно быть влево налево? Есть ли какие-то случаи, когда он «просто имеет смысл», чтобы он был один путь над остальными, а другие случаи, когда это просто произвольное решение? Или есть какой-то большой дизайн за всеми этому?
Решение
Как правило, это синтаксис «естественный»:
- Рассмотреть возможность
x - y + z
. Отказ Вы хотите, чтобы это было вправо, чтобы вы получили(x - y) + z
скорее, чемx - (y + z)
. - Рассмотреть возможность
a = b = c
. Отказ Вы хотите, чтобы это было вправо налево, чтобы вы получилиa = (b = c)
, скорее, чем(a = b) = c
.
Я не могу придумать пример того, что выбор, кажется, был сделан «произвольно».
Отказ от ответственности: Я не знаю Ruby, поэтому мои примеры выше основаны на синтаксисе C. Но я уверен, что те же принципы применяются в Руби.
Другие советы
Представьте, чтобы написать все с скобами в течение века или двух. У вас будет опыт, о котором оператор, скорее всего, будет связывать его ценности вместе сначала, и какой оператор последний. Если вы можете определить ассоциативность этих операторов, то вы хотите определить его таким образом, чтобы минимизировать кронштейны при написании формул в удобных условиях. IE (*) до (+), а (-) должен быть ассоциативным.
Кстати, левое / правое ассоциативное средство означает такой же, как левый / правый рекурсивный. Слово Associative - это математическая перспектива, рекурсивный алгорихмический. (См. «Конечный рекурсивный» и посмотрите, где вы пишете самые скобки.)
Большинство операторов Associativitivities в Comp Sci наклоняется непосредственно из математики. Специально символическая логика и алгебра.