Введите хинтинг возвращаемое значение с помощью ^ или: тег мета? - PullRequest
9 голосов
/ 26 июня 2011

Кажется, что они делают то же самое в Clojure. Какой синтаксис канонический?

(defn a ^int [] 4)

(defn b ^{:tag int} [] 4)

Я надеюсь, что это a, так как оно короче.

Ответы [ 2 ]

8 голосов
/ 26 июня 2011

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

(deftype Whatever [^{:tag ITransientVector
                     :unsynchronized-mutable true} foo])

Обратите внимание, что было бы эквивалентно и вполне приемлемо написать

(deftype Whatever [^:unsynchronized-mutable ^ITransientVector foo])

но я лично предпочитаю явную карту.

5 голосов
/ 26 июня 2011

Это каноническое «а». Это единственный, который я видел до сих пор в коде Clojure и в документации на сайте Clojure. См. здесь для получения дополнительной информации о подсказках типа.

Надеюсь, это поможет.

...