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

欢迎!请参阅关于页面获取更多关于这如何运作的信息。

+13
多方法
重标记

CLJS 有

cljs.user=> (source dispatch-fn)
(defn dispatch-fn
  "Given a multimethod, return it's dispatch-fn."
  [multifn] (-dispatch-fn multifn))

我们能否在 JVM 上也有这个核心函数呢?

2 答案

0

选择
 
最佳答案
0

这个在ClojureScript中有什么用例,或者为什么你想在Clojure中实现它?

这个用例可能是为了编写跨平台/方言代码:CLJ/CLJS/babashka

通常我只尝试只暴露函数,而不是实现细节/必须使用Interop才能获取的东西。有一些程序(包括 clojure.spec.alpha)使用这个字段,可以在用户空间中编写,而无需依赖于这个字段。但说实话,这样的程序并不太多。这可能主要是一个Clojure实现者特性,而不是对日常用户有用的特性,类似于为什么https://github.com/clojure/clojure/blob/7697d5da77a319077e71343f76fa204327881de4/src/clj/clojure/core.clj#L4380和destructure被公开。

https://grep.app/search?q=.dispatchFn&filter[lang][0]=Clojure
以下是添加此功能的CLJS问题/补丁

https://clojure.atlassian.net/browse/CLJS-1144

注意CLJS还添加了default-dispatch-val。
Slack上下文

borkdude:二月27日在下午2:34
为什么这个不在clojure.core的JVM中?
cljs.user=> (source dispatch-fn)
(defn dispatch-fn
  "给定一个多方法,返回它的dispatch-fn。"
  [multifn] (-dispatch-fn multifn))
/cc @wilkerlucio
:point_up
2条回复
alexmiller 9个月前
添加一个问题,这似乎是一个合理的想法。
by
我这样问是因为尽管这个问题在这里得到了很多赞,但我在CLJS或CLJ代码中很少看到这个方法的用法,大部分都是在较为高级的应用中,所以这似乎并不是特别关键。
by
以下是关于为什么希望在核心中包含它的更多背景信息: https://blog.michielborkent.nl/using-clojure-spec-alpha-with-babashka.html
这将允许其他Clojure实现自己的核心函数而不是在多个其他不真正重用的命名空间中暴露核心函数。
...