首页 > 解决方案 > 基于 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

解决方案


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

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

查看Clojure 多方法与协议,以简要讨论多方法与协议。


推荐阅读