2010-12-10 8 views
10

में बाइट सरणी कैसे प्रारंभ करें क्लोजर में बाइट सरणी बनाने के लिए वाक्यविन्यास क्या है, मानों के निर्दिष्ट संग्रह में आरंभ किया गया है?क्लोजर

इस तरह कुछ है, लेकिन यह काम करता है ...

(बाइट सरणी [0 1 2 3])

+1

अपने नमूना ** है ** clojure के बाद के संस्करणों में काम (1.8 में परीक्षण किया:

यह सिर्फ मामले में आप अपने वाक्य रचना थोड़ा tidier बनाने के लिए यह एक बहुत कुछ कर रहे हैं और चाहते हैं है एक मैक्रो)। यह सुनिश्चित नहीं है कि यह कब बदल गया। –

उत्तर

12

(बाइट सरणी (मानचित्र बाइट [0 1 2 3]))

afaik क्लोजर में कोई बाइट अक्षर नहीं है।

+0

सही; क्लोजर 1.5 के रूप में, इसमें बाइट शाब्दिक नहीं है: http://clojure.org/reader –

1
(byte-array [(byte 0x00) (byte 0x01) (byte 0x02) (byte 0x03)]) 
1
(byte-array [(byte 0) (byte 1) (byte 2)]) 

स्पष्टीकरण:

byte एक byte

byte-array एक byte[]

bytes byte[]

+1

बाइट-सरणी बाइट [] बनाता है, इसलिए बाइट्स को कॉल की आवश्यकता नहीं है। –

+0

आप सही हैं। स्वचालित रूप से मुक्केबाजी प्राइमेटिव्स ने मुझे उलझन में डाल दिया। –

+0

सही ढंग से, 'बाइट' को 'बाइट' से जोड़ता है, हालांकि 1.2 में फ़ंक्शंस के सभी तर्क ऑटोबॉक्साइड होते हैं, इसलिए 'बाइट-सरणी' अभी भी 'बाइट' एस प्राप्त करता है और उन्हें अनबॉक्स करने की आवश्यकता होती है। कोशिश करें '(लूप [i (बाइट 0)] (पुनरावृत्ति (बाइट 0)))' इसे सत्यापित करने के लिए 1.2 आरपीएल पर। –

4

अन्य पोस्टर है में बदल देता है बनाता है बनाता है अच्छा जवाब दिया जो अच्छी तरह से काम करता है।

(defmacro make-byte-array [bytes] 
    `(byte-array [[email protected](map (fn[v] (list `byte v)) bytes)])) 

(aget (make-byte-array [1 2 3]) 2) 
=> 3 
+2

एक समारोह भी ठीक से काम करेगा, है ना? यह जवाब [मैक्रो क्लब का पहला नियम] तोड़ता है (https://clojurefun.wordpress.com/2013/01/09/when-do-you-need-macros-in-clojure/): मैक्रोज़ लिखें मत! –