2024 年 Clojure 状态调查! 中分享您的想法。

欢迎!有关如何工作的更多信息,请参阅 关于 页面。

0 投票
Multimethods

你好:

我一直在研究 Self 语言,并尝试使用多方法来模拟 Self 风格的消息。我想知道大家对这个模式有什么看法

(ns self)

(def path "./hello.txt")

(defn inst [msg]
(if (map? msg) (keys msg) msg)
)

(defmulti hello inst)

(defmethod hello [:save] [msg]
(spit path (msg :save))
)

(defmethod hello :load [msg]
(slurp path)
)

(defn do-run [h]
(h {:save "world"})
(println (h :load))
)

(defn run [opts]
(do-run hello)
)

你认为这种模式有趣且有用吗?示例没有显示,但可能会有包含多个关键字的消息。

谢谢,
- Quenio

1 答案

+1 投票

你还可以考虑在 clojure.core.match 之上构建一些东西。不要被多方法局限住!或者你可能可以通过编写自己的宏来自定义分派来更接近理想。要注意的一件事是,使用 Clojure 内置的多方法分派通过键来选择,消息映射不得有任何“额外”的键。就大部分而言,Clojure 模式采用你可以将额外键放入映射而不会破坏契约的想法。

...