2012-07-01 35 views
7

Tôi khá mới đối với Clojure. Tôi có bản đồ kết quả từ cơ sở dữ liệu và chứa các giá trị quan trọng như:Phím bản đồ Clojure có dấu cách trong tên khóa

{:Unique Product ID "09876" :ProductName "XYZ"} 

Tôi muốn lấy các giá trị từ bản đồ nhưng tôi gặp sự cố khi nhận ID sản phẩm duy nhất.

ProductID (str (map-name ":Unique Product ID")) 

Tên sản phẩm hoạt động tốt sử dụng:

ProductName (str (map-name :ProductName")) 

Tôi không chắc chắn làm thế nào để xử lý các không gian trong khóa trường ID sản phẩm. Tôi nên lấy giá trị cho khóa đó từ bản đồ như thế nào?

Cảm ơn

Trả lời

14

Hãy thử (từ khóa "Unique ID sản phẩm")

+0

Cảm ơn Jeff - mà làm việc! Nhiều đánh giá cao!! – user1494355

7

Space là không ký tự hợp lệ trong một từ khóa, bạn đang cố gắng để làm một cái gì đó gần như chắc chắn sẽ gây ra đau trong tương lai.

Lưu ý rằng chức năng từ khóa không xác thực tính năng nhập của nó, vì vậy @ jeff-johnston là không đúng, tôi sợ.

thảo luận dài dòng ở đây:

https://groups.google.com/d/topic/clojure/WvXYkvLoQhI/discussion

clojuredocs đã được cập nhật với docstrings mới sau cuộc thảo luận mà thấy ở đây:

http://clojuredocs.org/clojure_core/clojure.core/keyword

+0

ồ, đó là điều tốt để biết. http://dev.clojure.org/jira/browse/CLJ-17 cho thấy một thời gian trong tương lai "hỗ trợ biểu tượng tùy ý" * có thể * được triển khai, nhưng tôi không thể tìm thấy một vé có liên quan. –

0

Bạn có thể sử dụng (keyword) như Jeff chỉ ra, nhưng tôi nghĩ bạn sẽ tốt hơn nếu bạn chuyển bản đồ bạn quay lại từ truy vấn cơ sở dữ liệu thành một khóa có khóa không có dấu cách. Tôi thấy chức năng này hữu ích cho mục đích này:

(defn despace [m] 
    (zipmap (map #(keyword (clojure.string/replace (name %) " " "_")) (keys m)) 
      (vals m))) 

Sau đó sử dụng dấu gạch ở vị trí của không gian:

(:Unique_Product_ID (despace {(keyword "Unique Product ID") "09876" :ProductName "XYZ"})) 
#=> "09876" 
Các vấn đề liên quan