Что такое соглашение для локальных переменных, которое имеет то же значение, что и аргумент функции?
Если мне нужна локальная переменная , которая имеет в качестве значения начального состояния аргумент функции (и, следовательно, имеет то же значение ), как я должен ее вызывать ?
В качестве искусственного примера (который, однако, демонстрирует довольно популярную конструкцию в Clojure):
(defn sum [coll]
(loop [local-coll coll, result 0]
(if (empty? local-coll)
result
(recur (rest local-coll) (+ (first local-coll) result)))))
Здесь local-coll
изначально инициализируется значением coll
, и оно также сохраняет это значение во время цикла. local-coll
определенно не хорошее название для него, но что это?
В Haskell это хороший стиль, чтобы поместить кавычку ('
) в конец имени переменной / функции, например var'
. В Common Lisp иногда я видел имена, заканчивающиеся звездочкой (*
). Clojure имеет ту же запись для функции , которая дублирует другое значение функции, но имеет немного другую семантику (например, список *). Но это обозначение также часто используется в строках документации, чтобы указать, что может быть несколько элементов этого типа (например, (methodname [args*] body)*
или (try expr* catch-clause* finally-clause?)
) и, таким образом, может привести к путанице при использовании для локальных имен переменных.
Java-взаимодействие также предоставляет такие вещи, как defn-
, то есть имена, заканчивающиеся дефисом (-
), для обозначения частных методов в сгенерированных классах. Поэтому имеет смысл использовать дефис для локальных (приватных для функции) переменных (хотя для меня это немного странно).
Итак, как мне поступить, называя мои локальные переменные в том же значении, что и аргумент функции?