Вопрос

Я попал в раздел на операторах в Язык программирования 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 наклоняется непосредственно из математики. Специально символическая логика и алгебра.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top