Идиоматический способ для однократных выражений в nim - PullRequest
0 голосов
/ 03 июля 2019

Почему я вижу

proc simple(a, b: int) : int =
  result = a + b

так часто в коде nim, когда кажется, что

proc simple(a, b: int) : int =
  a + b

будет достаточно?Есть ли какая-то семантическая разница между этими двумя, которые я пропускаю?

Единственная ссылка на неявное возвращение последнего утверждения, которое я нашел в nim-lang, была не в руководстве , а в tut , где говорится, что

[...] тело процедуры может состоять из одного выражения, значение которого затем возвращается неявно.

Что вводит в заблуждение: кажется, что оно работает для каждого «последнего выражения» (если результат не был уже установлен, то результат оператора должен быть отброшен)

Ответы [ 2 ]

1 голос
/ 04 июля 2019

В соглашениях о кодировании (https://nim -lang.org / docs / nep1.html # ввод-кодирование-соглашения ) они рекомендуют использовать return, только если это необходимо в потоке.

В книге Nim в действии говорится, что «не является идиоматичным использование ключевого слова return в качестве последнего утверждения процедуры», но это не явно о result = a + b против a + b.Из фрагментов вокруг книги, соглашение выглядит следующим образом:

  • Предпочитать a + b.
  • Использовать result = a + b, только если вы изменяете result, как в result.add(b).
  • Используйте return a только для раннего выхода из процесса.

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

proc resultVar: string = 
  result = "The result"
  "This cause an error"

Причина , стоящая за кодом типа result = a + b или return a, заключается в том, что люди не могут получить всю идиоматику, особенно когда они такие начинающие, как я.Я все еще вижу for i in range(len(variable)) в коде Python, который не только не питоничен, но и уродлив и неэффективен.

0 голосов
/ 03 июля 2019

Одной из более экзотических особенностей является неявная переменная результата: каждая процедура в Nim с не возвращаемым типом возврата имеет неявную переменную результата, которая представляет значение, которое будет возвращено [Википедия].

...