clojure - Clojure 中基于参数类型返回的规范方法

标签 clojure

如果参数是一个符号,则返回它。如果参数是列表,则调用另一个方法。

Clojure 新手,找不到规范的方法。在 Python 中,人们可以这样做:

def return_on_arg_type(arg):
  if type(arg) is str:
    return arg
  if type(arg) is list:
    return another_method(arg)

也许我可以使用多种方法,但如何匹配参数的类型,以及如何匹配 Clojure 中可接受的类型?

最佳答案

Clojure 中本质上有 3 种调度方法:

  1. 按照 Alan 的描述,将 cond 与谓词(即返回 true 或 false 且通常名称以 ? 结尾的方法)结合使用。
  2. 使用根据第一个参数的类型进行调度的协议(protocol)。这方面的引用文档位于 https://clojure.org/reference/protocols
  3. 多种方法。您可以将 Multimethods 视为一种可编程的调度方法。他们可以做的不仅仅是查看参数的类型,还可以查看参数、计算向量参数上的元素等等。规范文档位于https://clojure.org/reference/multimethods

看看Clojure multimethods vs. protocols关于多方法与协议(protocol)的简短讨论。

关于clojure - Clojure 中基于参数类型返回的规范方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57461983/

相关文章:

swing - 图标消失在由 Leiningen 制作的 uberjar 中

clojure - 如何在 Clojure 中编写 monoid 协议(protocol)?

Clojure RuntimeException - 标签 db/id 没有读取器功能

rest - Clojure 中的 OAuth1

ruby - Clojure 与 Node.js RAM 消耗

string - 检查 clojure 中的字符串是否包含子字符串

regex - 使用 IFn 扩展 Clojure 正则表达式以支持映射

clojure - 为什么 CouchDB 使用仅追加的 B+ 树而不是 HAMT

clojure - 为什么 (pr-str Double/POSITIVE_INFINITY) 返回不同的响应?

Clojure:列表替换函数