我想知道爲什麼在clojure輸出結束時會出現「nil」。這裏是我的代碼:爲什麼clojure在輸出結束時會出現「nil」
(defn foo [x &argu]
(print x &argu))
而另一個問題是,什麼是「&申辯」這裏的意思?一個可變參數或什麼?非常感謝!
我想知道爲什麼在clojure輸出結束時會出現「nil」。這裏是我的代碼:爲什麼clojure在輸出結束時會出現「nil」
(defn foo [x &argu]
(print x &argu))
而另一個問題是,什麼是「&申辯」這裏的意思?一個可變參數或什麼?非常感謝!
REPL(或您正在使用的任何執行環境)可讓您知道代碼評估的輸出。正如你寫的那樣,你的函數不會返回任何東西。在這種情況下,按照慣例返回nil
。 nil
是Clojure的標記nothing/null
。你所有的代碼都在印刷 - 這是一種「副作用」。
重要的是要注意,nil
在Clojure中是一個合適的值。這與一些甚至不允許您將undefined/unknown
值與另一個值相比的語言進行比較 - 這樣做會產生異常。
通常有一個空間,所以[x & argu]
。它很重要 - 所以請在代碼中放置空格,然後重試。這意味着該函數需要一個或多個參數。你說這是'可變的',是非常正確的。
大多數語言都有'無'和'可變參數'的概念。由於Clojure是一種功能性語言,因此從功能中「迴歸」的整個思想變得非常重要。在代碼中優先考慮沒有副作用可以使得推理更容易。
這是你的函數改變一點點:
(defn foo [x & argu]
(println x argu))
而且這是在REPL用法示例:
=> (foo 3 "Hello" "how" "are" "you?")
3 (Hello how are you?)
nil
如何看功能argu
裏面已經成爲一個list
。
*你的函數不返回任何東西*更好地說,一個空的函數體評估爲['nil'](https://clojure.org/reference/data_structures#nil),這是Clojure中的一個合適的值,通常返回在沒有任何其他價值的情況下。如果它的意思是* undefined *,那麼測試它的平等性將會是可疑的。 – Thumbnail
當我運行(foo 3「hello」)時,它出來3hellonil –
'print'在最後沒有'換行',這就是爲什麼輸出只是在之前輸出的東西之後進行的原因。只有在特殊情況下才需要「打印」。使用'println'的做法更爲常見,它有一些不錯的格式。 –