Tôi nhận thấy đây là một ý tưởng tồi vì nhiều lý do. Tôi cũng nhận ra rằng với tôi có một rep stackoverflow của 23, đó là bản chất để giả định rằng tôi là một newb học chương trình. Tuy nhiên, hãy làm hài lòng tôi, và tập trung vào "làm thế nào chúng ta có thể làm điều này" hơn là "tại sao bạn muốn làm điều này/bạn không muốn làm điều này" khía cạnh.Clojure Dynamic Binding
Những gì tôi muốn:
(def dog (Dog. ...))
(def cat (Cat. ...))
(with-animal dog
(println (str "Dog: " (speak) "\n")))
(with-animal cat
(println (str "Cat: " (speak) "\n")))
để đầu ra:
Dog: woof
Cat: meow
Vì vậy, về cơ bản, tôi muốn với động vật là một s.t. vĩ mô tất cả các lần xuất hiện của cuộc gọi hàm "nói" được ánh xạ tới đối tượng mà tôi đang gọi khối.
Đặc biệt, tôi không muốn viết:
(let-binding [speak (fn [] "woof")] ...)
(let-binding [speak (fn [] "meow")] ...)
Thay vào đó, tôi muốn với động vật để làm cho nói bản đồ chức năng để một số phương pháp của đối tượng Tôi gọi với.
Có cách nào để làm điều này trong Clojure không?
Cảm ơn!
Tại sao bạn không sử dụng giao thức? – DanLebrero
tôi thích tuyên bố từ chối trách nhiệm :) – szymanowski