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实现者的功能,而不是日常用户所必需的,类似于为什么https://github.com/clojure/clojure/blob/7697d5da77a319077e71343f76fa204327881de4/src/clj/clojure/core.clj#L4380和解构都是暴露出来的

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

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

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

borkdude  在2月27日 2:34 PM
为什么这个没有在Java VM的clojure.core中?
cljs.user=> (source dispatch-fn)
(defn dispatch-fn
  "给定一个多方法,返回它的dispatach-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 实现实现和使用自己的核心函数,而不是将其暴露在多个不真正重复使用的命名空间中。
...