2024年 Clojure调查 中分享你的想法!

欢迎!请参阅关于页面以了解更多关于如何使用该信息。

0
多方法

你好,

我已经阅读关于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模式都拥抱了这样的观点,即你可以将额外的键放入映射中而不会破坏契约。

...