Выражения приложения с высоким приоритетом в качестве аргументов - PullRequest
3 голосов
/ 26 сентября 2011

Выражение приложения с высоким приоритетом - это выражение, в котором за идентификатором сразу следует левая часть без пробелов, например, f(g).Скобки требуются при передаче их в качестве аргументов функции: func (f(g)).

В разделе 15.2 спецификации говорится, что грамматика и правила приоритета допускают использование формы без скобок - func f(g) - нодополнительная проверка предотвращает это.

Почему это намеренно запрещено?Это устранит необходимость в чрезмерных скобках и конвейерах и, как правило, сделает код намного чище.

Типичным примером является

raise <| IndexOutOfRangeException()

или

raise (IndexOutOfRangeException())

.просто

raise IndexOutOfRangeException()

1 Ответ

2 голосов
/ 26 сентября 2011

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

// Call 'foo' with the result of 'bar()' as an argument
foo bar()

// Call 'foo' with 'bar' as the first argument and '()' as the second 
foo bar ()

Есть еще некоторые острые углы, когда добавление скобок меняет оценку (см. Эту формуляр после ), но это "просто" меняет порядок оценки. Это изменит смысл вашего кода!

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