2015-06-20 57 views
3

返回的數據類型如下表達作品 -從FN字面

((fn[n][(take n (range))]) 10) 

雖然低於拋出一個錯誤 -

(#([(take % (range))]) 10) 

爲什麼不能我只是從字面函數返回一個數據類型?

+1

我沒有訪問計算機,但宏展開fn文字,你會看到不同之處。 –

回答

3

#(do [1 2]) 

由於@Mars表示您也可以使用vector函數的替代方法。

#(vector 1 2) 
4

#匿名函數宏擴展爲fn形式,例如,

#([1 2]) 

擴展爲(fn* [] ([1 2]))

,你可以看到,當這個叫,你試圖返回向量將被作爲函數調用,因爲沒有提供參數,這將失敗。這是你有同樣的問題:如果你絕對要使用的#讀者宏觀只是使用do匿名函數返回的「數據」

#([(take % (range))]) 

擴展爲

(fn* [x] ([(take x (range))])) 
+0

那麼我怎麼寫一個函數文字,我只想返回一個矢量? – murtaza52

+1

@ murtaza52 - 你想將從'take'返回的序列轉換成矢量嗎?你可以使用'#(vec(帶%(range)))'。如果你想返回一個包含序列的向量,我想你需要使用'fn'形式。 – Lee

+1

在'#()'函數中使用'vector'而不是'[']'作爲外部表達式。 – Mars