Почему запятая в вызове функции не является синтаксической ошибкой? - PullRequest
0 голосов
/ 07 декабря 2018

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

fn foo(_a: u8) {}

fn main() {
    foo(3, );
}

1 Ответ

0 голосов
/ 07 декабря 2018

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

let a = [
    0,
    1,
    2,
    3,
];

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

Обратите внимание, что вызовы макросов в Rust не всегда позволяют запаздыватьзапятая.

История других языков со временем становится все более допустимой для запятой.JavaScript всегда допускает запятую в массивах литералов.Они позволили это для литералов объекта в EcmaScript 5 и для списков параметров функции в EcmaScript 2017, в то время как стандартный JSON по-прежнему не допускает конечные запятые.Python до недавнего времени не разрешал использовать запятую после *args и **kwargs, но теперь они также разрешены.

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