में लागू संकेतों को टाइप न करें मैंने फ़ील्ड के लिए प्रकार संकेतों के साथ defrecord
का उपयोग करके एक प्रकार बनाया है। हालांकि, मैंने पाया कि इन प्रकार के संकेत रचनाकारों में लागू नहीं होते हैं और मैं उनके साथ कुछ अजीब चीजें करने में सक्षम हूं। उदाहरण के लिए नीचे दिए गए स्निपेट को देखो:डिफ्रेकॉर्ड कन्स्ट्रक्टर
user=> (defrecord Person [#^String name #^Integer age])
user.Person
user=> (seq (.getConstructors Person))
(#<Constructor public user.Person(java.lang.Object,java.lang.Object,
java.lang.Object,java.lang.Object)>
#<Constructor public user.Person(java.lang.Object,java.lang.Object)>)
user=> (Person. (Integer. 123) "abhinav")
#:user.Person{:name 123, :age "abhinav"}
निर्माता दिखाया प्रदान की प्रकार संकेत के साथ मेल नहीं खाते हस्ताक्षर (वे String
और Integer
दोनों के लिए Object
का उपयोग करें) और मैं गलत क्षेत्र प्रकार के साथ वस्तुओं का निर्माण करने में सक्षम हूँ।
क्या मेरे कोड में कुछ गड़बड़ है या क्या यह क्लोजर में एक बग है?
मैं क्लोजर 1.2.0-बीटा 1 पर हूं।
एक तरफ, यदि आपका कोड 1.2 विशेषताओं पर निर्भर करता है, तो आपको पाठक मेटाडेटा को शुरू करने के लिए '^' ''^^ 'को प्राथमिकता देना चाहिए; '# ^' का पुराना अर्थ 1.2 में बहिष्कृत है। –