Почему разные операторы имеют разную ассоциативность? - PullRequest
4 голосов
/ 17 октября 2010

Я попал в раздел об операторах в Языке программирования Ruby , и это заставило меня задуматься об ассоциативности операторов. Кстати, это не вопрос Ruby - он применим ко всем языкам.

Я знаю, что операторы должны так или иначе ассоциироваться, и я понимаю, почему в некоторых случаях один путь предпочтительнее другого, но я изо всех сил пытаюсь увидеть более широкую картину. Существуют ли критерии, которые используют разработчики языка, чтобы решить, что должно быть слева направо, а что справа налево? Есть ли случаи, когда «просто имеет смысл», чтобы это был один путь над другими, и другие случаи, когда это просто произвольное решение? Или за всем этим стоит какой-то грандиозный дизайн?

Ответы [ 3 ]

7 голосов
/ 17 октября 2010

Обычно синтаксис «натуральный»:

  • Рассмотрим x - y + z.Вы хотите, чтобы это было слева направо, чтобы вы получили (x - y) + z вместо x - (y + z).
  • Рассмотрим a = b = c.Вы хотите, чтобы это было справа налево, так что вы получите a = (b = c), а не (a = b) = c.

Я не могу вспомнить пример, где, кажется, выбор былсделано "произвольно".

Отказ от ответственности: я не знаю Ruby, поэтому мои примеры выше основаны на синтаксисе языка Си.Но я уверен, что те же принципы применяются в Ruby.

4 голосов
/ 17 октября 2010

Представьте себе, что пишете все в скобках в течение столетия или двух.Вы узнаете, какой оператор, скорее всего, сначала свяжет свои значения, а какой - последний.Если вы можете определить ассоциативность этих операторов, то вы хотите определить ее таким образом, чтобы минимизировать скобки при написании формул в удобочитаемых терминах.Т.е. (*) перед (+) и (-) должны быть левоассоциативными.

Кстати, ассоциативность слева / справа означает то же самое, что и рекурсивность слева / справа.Слово ассоциативный - это математическая перспектива, рекурсивное - алгоримическое.(см. «end-recursive» и посмотрите, где вы пишете больше скобок.)

0 голосов
/ 17 октября 2010

Большинство операторских ассоциаций в компьютерной науке взято непосредственно из математики. Конкретно символическая логика и алгебра.

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