ho un po 'di codice Clojure che sta cercando di interoperabilità attraverso un paio di strati di codice Java (in questo caso, java.nio.Path
attraverso java.nio.file.WatchEvent<?>
:Come si può digitare un suggerimento all'interno della macro di threading (->)?
(defn unroll-event
[^WatchEvent event]
{ :kind (.kind event)
:context (.context event)
:path (-> event .context .toAbsolutePath .toString)})
In questo codice, ho tipo accennato event
, quindi vorrei Penso che dovrebbe essere in grado di capire che cosa .context
deve restituire, e come tale, essere in grado di capire cosa .toAbsolutePath
e .toString
fanno. credo che in questo caso, dal momento che .context
è definito è la restituzione di un tipo generico T
, ho mi chiedo se posso digitare suggerire la chiamata a .context
. Ho provato solo prima g ^java.nio.file.Path
-.context
, e ^Path
e ^String
-.toAbsolutePath
e toString
, rispettivamente, ma ho ancora ottenere gli avvertimenti:
Reflection warning, junkcode/core.clj:28 - reference to field toAbsolutePath can't be resolved.
Reflection warning, junkcode/core.clj:28 - reference to field toString can't be resolved.
C'è qualcosa che posso fare in questo caso? È perché ->
è una macro e ci sono regole speciali per il tipo di suggerimento al suo interno?
A cosa si sta espandendo? Usa 'clojure.walk/macroexpand-all' – noahlz