วิธีการแปลงคำหลัก clojure เป็นสตริง?


100

ในแอปพลิเคชันของฉันฉันต้องแปลงคำหลัก clojure เช่น : var_name เป็นสตริง "var_name" มีความคิดอย่างไรที่สามารถทำได้?

คำตอบ:


166
user=> (doc name)
-------------------------
clojure.core/name
([x])
  Returns the name String of a string, symbol or keyword.
nil
user=> (name :var_name)
"var_name"

3
ฉันนึกคำตอบที่สมบูรณ์กว่านี้ไม่ออก แต่เพื่อความสนุกฉันจะกล้าให้ใครสักคนคิดขึ้นมา
Hamish Grubijan

2
@ แฮมิชบางทีโดยการเพิ่ม(source name)?
ponzao

2
วิธีการnameทำงานไม่ควรสนใจ docstring คือสัญญา สิ่งอื่นใดเป็นรายละเอียดการใช้งานที่ไม่ควรพึ่งพา
kotarak

3
ขอบคุณ kotarak! ฉันรัก Clojure นี้มากขึ้นทุกวัน! นี่เป็นวันที่สามของฉัน
Santosh

4
บางทีคำตอบนี้น่าจะอธิบายได้ว่าทำไม(name :foo/123/bar)"บาร์" หากคุณต้องการเส้นทางแบบเต็มของคำหลักที่คุณต้องใช้subsหรือสิ่งที่ต้องการ(str (namespace k) "/" (name k))
AnnanFay

13

อันที่จริงการรับส่วนเนมสเปซของคำหลักนั้นง่ายพอ ๆ กัน:

(name :foo/bar)  => "bar"
(namespace :foo/bar) => "foo"

โปรดทราบว่าเนมสเปซที่มีหลายเซ็กเมนต์จะถูกคั่นด้วย "." ไม่ใช่ "/"

(namespace :foo/bar/baz) => throws exception: Invalid token: :foo/bar/baz
(namespace :foo.bar/baz) => "foo.bar"

และสิ่งนี้ยังใช้ได้กับคำหลักที่มีคุณสมบัติของเนมสเปซ:

;; assuming in the namespace foo.bar
(namespace ::baz) => "foo.bar"  
(name ::baz) => "baz"

12

โปรดทราบว่าคำตอบของ kotarak จะไม่ส่งคืนส่วนเนมสเปซของคีย์เวิร์ดเพียงแค่ส่วนของชื่อ - ดังนั้น:

(name :foo/bar)
>"bar"

การใช้ความคิดเห็นอื่น ๆ ของเขาให้สิ่งที่คุณขอ:

(subs (str :foo/bar) 1)
>"foo/bar"

0

มันไม่ได้เป็นงานที่น่าเบื่อในการแปลงชนิดข้อมูลใด ๆ ลงในสตริงนี่คือตัวอย่างโดยใช้STR

(defn ConvertVectorToString []
 (let [vector [1 2 3 4]]
 (def toString (str vector)))
  (println toString)
  (println (type toString)
(let [KeyWordExample (keyword 10)]
 (def ConvertKeywordToString (str KeyWordExample)))
  (println ConvertKeywordToString)
  (println (type ConvertKeywordToString))

(ConvertVectorToString) ;;Calling ConvertVectorToString Function

Output will be:
1234
java.lang.string
10
java.lang.string

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.