Các case
doc nóiCó thể sử dụng biểu mẫu trường hợp của Clojure với Java enum không?
Không giống như cond và condp, trường hợp không có văn bản liên tục theo thời gian ... Tất cả các cách thức của hằng số biểu thức được chấp nhận trong trường hợp.
Tôi muốn hưởng lợi từ việc gửi liên tục trong thời gian case
để khớp với các enums Java. tuyên bố switch
Java hoạt động tốt với sự đếm, nhưng làm như sau trong Clojure:
(defn foo [x]
(case x
java.util.concurrent.TimeUnit/MILLISECONDS "yes!"))
(foo java.util.concurrent.TimeUnit/MILLISECONDS)
Kết quả trong: IllegalArgumentException No matching clause: MILLISECONDS
đang enums không được hỗ trợ trong case
? Tôi có làm điều gì sai? Tôi có phải sử dụng cond
hoặc có giải pháp tốt hơn không?
cemerick có ghi-up và cách giải quyết cho điều này tại http://cemerick.com/2010/08/03/enhancing-clojures-case-to-evaluate-dispatch-values/ –
Cảm ơn, cả hai bạn! Cả hai giải pháp thứ tự (tôi đang sử dụng này trong một macro để dễ đọc không phải là một vấn đề) và giải pháp của cemerick làm việc tốt. – pron
Tôi đã quá phát ban: rõ ràng là trường hợp của cemerick + không hoạt động cho enums: '(case + java.util.concurrent.TimeUnit/MINUTES java.util.concurrent.TimeUnit/MINUTES" yes! "); CompilerException java.lang.RuntimeException: Không thể nhúng đối tượng trong mã'. (nhưng các giải pháp thứ tự hiện, rõ ràng) – pron