【问题标题】:Clojure Function checkClojure 函数检查
【发布时间】:2015-03-17 09:37:04
【问题描述】:

当我在一个程序中有 3 个函数时,我如何检查特定的函数名称? 为了功能选择,我想知道这些功能的名称。

比如说线性核函数、逻辑核函数和非负函数,当我调用程序时,会调用其中一个函数,我应该检查它是线性函数、逻辑函数还是非负函数,所以我可以执行与所选功能相关的另一个功能。

我认为进行功能选择可以节省我重复基本代码的时间。但是做函数选择可能不是我可以在 Clojure 中使用的最佳设计。

仅供参考,在这个级别,我已经使用“meta”关键字来访问函数名,但是当我创建时

(defn isKernel [krn]
  (if (= (str (:name (meta #'krn))) "logistic-kernel") 1 0))

编译器无法解析“krn”变量

【问题讨论】:

  • 为什么不直接做(= krn logistic-kernel)

标签: function design-patterns clojure code-reuse


【解决方案1】:

在 Clojure 中,函数是值,就像数字 4 一样。这是大部分语言(以及一般的函数式编程)基础的重要组成部分。大多数时候我们将函数存储在vars 中,尽管这不是必需的。 作为值的函数没有名称* 因此,与其检查传递的函数的名称是否与已知名称匹配,不如询问“此函数是否具有相同的值作为存储在 var 中的函数”正如@cgrand 指出的那样,这可以通过调用= 来完成。

如果您正在执行这种调度,那么protocols 是一个比自己滚动更好的工具

*它们确实有用于创建递归函数文字的名称,尽管这不是我在这里得到的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-18
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    相关资源
    最近更新 更多