मैं कुछ Clojure कोड है कि (, java.nio.file.WatchEvent<?>
के माध्यम से जावा कोड के एक जोड़े परतों के माध्यम से Interop के लिए इस मामले में java.nio.Path
कोशिश कर रहा है है:आप थ्रेडिंग (->) मैक्रो के अंदर संकेत कैसे टाइप कर सकते हैं?
(defn unroll-event
[^WatchEvent event]
{ :kind (.kind event)
:context (.context event)
:path (-> event .context .toAbsolutePath .toString)})
इस कोड में, मैं प्रकार का संकेत दिया event
है, तो मैं करूंगा , लगता है कि यह यह पता लगाने की क्या .context
वापस जाने के लिए माना जाता है, और इस तरह के रूप में, यह पता लगाने की क्या .toAbsolutePath
और .toString
करते हैं। मैं इस मामले में लगता है कि सक्षम हो सक्षम होना चाहिए, के बाद से .context
परिभाषित किया गया है एक सामान्य प्रकार T
लौट गया है मैं मैं सोच रहा हूं कि क्या मैं .context
पर कॉल को संकेत दे सकता हूं। मैंने केवल प्रीपेन्डिन की कोशिश की है
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.
वहाँ कुछ मैं इस मामले में कुछ कर सकते हैं: जी .context
को ^java.nio.file.Path
, और ^Path
और ^String
.toAbsolutePath
और toString
को क्रमश: लेकिन मैं अभी भी चेतावनी मिल सकता है? क्या ऐसा इसलिए है क्योंकि ->
एक मैक्रो है और उसमें संकेत देने के लिए विशेष नियम हैं?
इसका विस्तार क्या हो रहा है? 'Clojure.walk/macroexpand-all' का प्रयोग करें – noahlz