คำหลักที่มีทั่วโลก , สัญลักษณ์ไม่ได้
ตัวอย่างนี้เขียนด้วย JavaScript แต่ฉันหวังว่ามันจะช่วยนำประเด็นนี้ไปได้
const foo = Symbol.for(":foo") // this will create a keyword
const foo2 = Symbol.for(":foo") // this will return the same keyword
const foo3 = Symbol(":foo") // this will create a new symbol
foo === foo2 // true
foo2 === foo3 // false
เมื่อคุณสร้างสัญลักษณ์โดยใช้Symbol
ฟังก์ชันคุณจะได้รับสัญลักษณ์ที่แตกต่าง / ส่วนตัวทุกครั้ง เมื่อคุณขอสัญลักษณ์ผ่านSymbol.for
ฟังก์ชันคุณจะได้รับสัญลักษณ์เดิมกลับมาทุกครั้ง
(println :foo) ; Clojure
System.out.println(RT.keyword(null, "foo")) // Java
console.log(System.for(":foo")) // JavaScript
เหล่านี้เหมือนกันทั้งหมด
ชื่ออาร์กิวเมนต์ของฟังก์ชันเป็นแบบโลคัล เช่นไม่ใช่คำหลัก
(def foo (fn [x] (println x))) ; x is a symbol
(def bar (fn [x] (println x))) ; not the same x (different symbol)