【问题标题】:Clojure: fully qualified name of a functionClojure:函数的完全限定名
【发布时间】:2010-09-21 15:04:16
【问题描述】:

在 Clojure 中,有没有比查找函数的完全限定名(已知具有元信息)更优雅的方法

(defn fully-qualified-name [fn]
  (let [fn-meta (meta fn )
        fn-ns (ns-name (:ns fn-meta))
        ]
    (str fn-ns "/" (:name fn-meta))))

需要运行时解决方案。欢迎阅读时和编译时解决方案。

【问题讨论】:

  • 是否必须在函数中(而不是在宏或 REPL 的编译时)?

标签: namespaces clojure


【解决方案1】:

(resolve 'foo) 返回名为“foo”的 Var 及其完全限定名称。

【讨论】:

    【解决方案2】:

    语法引用怎么样?它进行自动限定。使用 ` 而不是 '

    user=> `(inc)
    (clojure.core/inc)
    user=> `(fn)
    (clojure.core/fn)
    

    【讨论】:

    • 在阅读时非常优雅和有用。 (str `inc) 相当于完全限定名称。任何运行时解决方案?
    • 你打算用结果做什么?
    • 并非所有函数都有完全限定的名称(匿名函数没有部分......)。动态查找是一件很奇怪的事情。
    • @Nicolas 我已经修改了问题以澄清具有完全限定名称的函数的解决方案就足够了。
    【解决方案3】:

    type 给出一个完全限定的名称,而不考虑元信息。

    【讨论】:

      【解决方案4】:

      .toString 的输出可以帮助您入门:

      user=> (.toString map)
      "clojure.core$map@11af7bb"
      

      【讨论】:

      • 还写(str map)来获得完全限定的名称使用(str`map)
      猜你喜欢
      • 1970-01-01
      • 2020-11-12
      • 2013-11-27
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-08
      • 2016-06-30
      相关资源
      最近更新 更多