【问题标题】:What does the idiomatic (defn -main ...) mean in a clojure program?clojure 程序中的惯用语 (defn -main ...) 是什么意思?
【发布时间】:2011-03-14 22:21:14
【问题描述】:

我熟悉来自例如的包。 Java 和 Lisp,但我在其他人的代码中看到的是一些明显的习惯用法,比如调用入口点“-main”并在 (in-ns `foo) 中为命名空间名称使用反引号,诸如此类。我在文档或教程中的任何地方都没有看到这些内容。是否有一些资源可以解释围绕结构化程序的此类约定?

编辑:

我想我一定是从这个答案中找到了反引号:Splitting a Clojure namespace over multiple files,这是我在试图理解 (defn -main ...) 时偶然发现的。鉴于作者,我将其视为最佳实践。但是,现在我浏览了他引用的 Clojure 资源,我发现只使用了常规引用。我想这很可能是一个错字。

(相应地缩小了题目的范围)

【问题讨论】:

  • 我在这里查看了几个类似标题的问题,但它们不是我想要的
  • in-ns 中的反引号是一个有趣的(并且看似未记录的)技巧。为了澄清您的问题,您是指单个源文件中的定义组织还是其包结构中所有文件的组织?
  • 肯定是后者。我认为我在这个网站的帖子中看到了反引号。明天我会试着追踪它。现在需要睡觉了。 zzzzzzzzzzz

标签: clojure


【解决方案1】:

gen-class 的默认值是使用 - 作为该类的方法名称的前缀。这就是为什么 -main 是 java -cp clojure.jar yourclass 的默认入口点

反引号用当前命名空间限定它们的参数,因此 (in-ns `foo) 与 (in-ns 'current-namespace/foo) 相同,我认为这不是特别惯用的。惯用的方法是将每个命名空间放在自己的文件中,并在顶部以 (ns ...) 开头,并根据需要使用或要求它们。

【讨论】:

  • 好的,我找到了 gen-class,谢谢 +1。至于关于命名空间的观点,我想我可能看到了另一种结构,其中一个源文件定义 (ns ...) 和一堆其他使用 (in-ns ...)。
  • 查看我的问题中的链接,例如这种风格
  • @fizzer:是的,我很确定这是一个错字。虽然跨文件拆分命名空间很有用,但我仍然不会称其为惯用的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多