回答
在clojure中,以:
作爲前綴的符號是keywords。 Official docs。用作功能的關鍵字具有與get幾乎相同的行爲。所以(:x y)
的意圖是(get y :x)
。
如果我們假設有一個在你的程序不會出現此圖像中(deftype Double [x y])
,這意味着你最後的表格TRIPPLE類型的第二個元素是場:x
或雙y
的.x
,這正好是值(Double. 10, 20)
。你可以在REPL測試這個,如果你想...
user> (defrecord MyDouble [x y])
user.MyDouble
user> (defrecord MyTripple [x y z])
user.MyTripple
user> (def x (MyDouble. 10 20))
#'user/x
user> (def y (MyDouble. x 40))
#'user/y
user> (def z (MyTripple. x (:x y) y))
#'user/z
user> z
#user.MyTripple{:x #user.MyDouble{:x 10, :y 20}, :y #user.MyDouble{:x 10, :y 20}, :z #user.MyDouble{:x #user.MyDouble{:x 10, :y 20}, :y 40}}
user> (:x y)
#user.MyDouble{:x 10, :y 20}
它是共享結構!
(defrecord MyDouble [x y]) ;; (defrecord Double [x y]) produces an exception
(defrecord Triple [a b c])
(def x (MyDouble. 10 20))
這將創建一個新的MyDouble
紀錄值10
和20
。 (:x x)
=> 10,(:y x)
=> 20.
(def y (MyDouble. x 40))
這將創建一個新的MyDouble
記錄。它的第一個值是x
那時的值,即#user.MyDouble{:x 10, :y 30}
。和40
。即,y
的值爲:#user.MyDouble{:x #user.MyDouble{:x 10, :y 20}, :y 40}
。
(def z (Triple. x (:x y) y))
這創建了一個新的Triple
。目的。和前一行一樣,第一個值是#user.MyDouble{:x 10, :y 30}
。所述第二值是表達式(:x y)
的值:
user=> (:x #user.MyDouble{:x #user.MyDouble{:x 10, :y 20}, :y 40})
#user.MyDouble{:x 10, :y 20}
因此,所述第二值還#user.MyDouble{:x 10, :y 20}
。第三個值是y
或#user.MyDouble{:x #user.MyDouble{:x 10, :y 20}, :y 40}
的值。
所以z
,打印出來,就是:
#user.Triple{:a #user.Mydouble{:x 10, :y 20},
:b #user.Mydouble{:x 10, :y 20},
:C#user.Mydouble{:x #user.Mydouble{:x 10, :y 20},
:y 40}}
什麼圖形顯示了你的是,有很多共享的結構在這裏。您在z
中看到的#user.Mydouble{:x 10, :y 20},
重複三次,其實是完全相同的對象,而不是三份。所以是的,在回答你最後一個問題時,箭頭指向整個事物,而不僅僅是數字20.
該圖完全混淆。
x
用於兩個不同的東西:
- 符號爲
Double
類型和Double
類型的字段的 - 名稱的記錄。
假設x
是Double
的第一字段的名稱,給
(def y (MyDouble. x 40))
然後
(def z (Triple. x (:x y) y))
...相當於
(def z (Triple. x x y))
因此兩個箭頭指向Double{:x 10, :y 20}
,全局值爲x
(假設其他字段名爲y
)。
將這些引用視爲指針很少有幫助。像Clojure中的幾乎所有基本數據結構一樣(只有deftype
s春天才算作爲例外),記錄是不可變的。
- 1. 部分PDF文件的說明
- 2. __attribute__格式的特定說明符?
- 3. 檢測特定的搖動(說明:D)
- 4. onMeasure定製視圖說明
- 5. 如何只顯示特定視圖中的部分部分
- 6. 從SWT部分刪除說明
- 7. 特定部分
- 8. 圖片說明
- 9. 「完整視圖聲明必須出現在私有部分」的說明
- 10. 如何滾動到特定的UITableViewCell頂部到UITableView頂部不是中心? (2個GIF圖片說明)
- 11. 裁剪圖像的特定部分
- 12. 平移到圖像的特定部分
- 13. 透明部分的視圖?
- 14. 特定部分中的HTML重定向
- 15. 從部分行動返回部分視圖到特定的div
- 16. 對於awk中的特定命令的說明
- 17. C++中最低成本法的部分說明
- 18. QT qmake說明中定義?
- 19. javafx中的部分透明圖像
- 20. 部分專門明確的模板特
- 21. 如何動畫矢量繪圖中圖標的特定部分?
- 22. Magento從名稱,圖片和說明中獲取特定類別的產品
- 23. pycharm圖標說明?
- 24. xhprof圖表說明
- 25. haar分類器中cascade.xml的說明
- 26. Response.Write Markup的特定部分
- 27. 特定的TableView部分
- 28. 部分中的自定義圖像 - 透明度問題?
- 29. NASM特定 - 部分與[部分]
- 30. RequireJS庫的定義說明
沒有'Double'的定義就不明確。是'Double'中的第一個插槽叫做'x'? – noisesmith 2014-10-10 15:16:35
從哪裏來這張圖? – galdre 2014-10-10 16:21:08