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

通常我尝试只暴露函数,而不是实现详情,使用互操作性工具得到的那些东西。有些程序(包括clojure.spec.alpha)使用这个字段,可以在用户空间不依赖此字段的情况下编写。但坦白说,这样的程序并不多。这可能是clojure/implementor功能,对普通用户来说并不是很有用,类似于为什么https://github.com/clojure/clojure/blob/7697d5da77a319077e71343f76fa204327881de4/src/clj/clojure/core.clj#L4380和解构被暴露。

https://grep.app/search?q=.dispatchFn&filter[lang][0]=Clojure
下面是添加这个功能的CLJS issue/补丁

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

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

borkdude:: 2月27日 2:34 PM
为什么这个不是在JVM上的clojure.core中?
cljs.user=> (source dispatch-fn)
(defn dispatch-fn
  "给定一个多重方法,返回它的dispatch-fn。"
  [multifn] (-dispatch-fn multifn))
/cc @wilkerlucio
:point_up
2条回复
alexmiller  9个月前
添加一个询问问题,这似乎是一个合理的需求。
我之所以这样问,是因为虽然这个问题的赞同票很多,但我发现CLJS中使用此方法的情况和CLJ代码中查找该字段的情况非常少,大多数都是相当高级的使用,所以这似乎并不是特别关键。
在这里提供更多背景信息,说明为什么在核心库中添加该功能会是件好事:[链接](https://blog.michielborkent.nl/using-clojure-spec-alpha-with-babashka.html)
这将允许其他Clojure实现实现和使用自己的核心函数,而不是在几个实际上未重复使用的命名空间中公开暴露。
...