Использование ^ в определении параметра функции clojure - PullRequest
0 голосов
/ 20 мая 2018
(defn lines
  "Given an open reader, return a lazy sequence of lines"
  [^java.io.BufferedReader reader]
  (take-while identity (repeatedly #(.readLine reader))))

что означает эта строка?-> [^java.io.BufferedReader reader]

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

1 Ответ

0 голосов
/ 20 мая 2018

Документацию можно найти здесь:

https://clojure.org/reference/java_interop#typehints

Clojure поддерживает использование подсказок типа, чтобы помочь компилятору избежать отражения в критических областях производительностикод.Как правило, следует избегать использования подсказок типа, пока не возникнет известное узкое место производительности.Подсказки типов - это теги метаданных, размещенные на символах или выражениях, которые используются компилятором.Они могут быть размещены в параметрах функций, именах с привязкой, именах переменных (когда они определены) и выражениях:

(defn len [x]
  (.length x))
(defn len2 [^String x]
  (.length x))
...

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

Вы также должны проверить:

И никогда, никогда не терпят неудачучтобы открыть вкладку браузера для The Clojure CheatSheet


Вы также можете просмотреть этот ответ .

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