我遵循这里的说明,并试图通过调用lein jar从clj源生成一个Java类。
但是,当我稍微编辑代码以添加自己的测试函数时:
(ns some.Example
(:gen-class))
(defn -main
[greetee]
(println (str "Hello " greetee "!")))
(defn -foo []
"foo bar")
.. 然后用lein jar生成一个Java类文件(我在文章末尾追加了project.clj),我发现生成的jar包含作为内部类的方法:
$ jar tvf example-1.0.0.jar
76 Sun Feb 17 20:56:24 EET 2013 META-INF/MANIFEST.MF
1225 Sun Feb 17 20:56:24 EET 2013 META-INF/maven/some/example/pom.xml
87 Sun Feb 17 20:56:24 EET 2013 META-INF/maven/some/example/pom.properties
2697 Sun Feb 17 20:56:24 EET 2013 some/Example__init.class
1499 Sun Feb 17 20:56:24 EET 2013 some/Example$loading__4784__auto__.class
1035 Sun Feb 17 20:56:24 EET 2013 some/Example$_main.class
565 Sun Feb 17 20:56:24 EET 2013 some/Example$_foo.class
1771 Sun Feb 17 20:56:24 EET 2013 some/Example.class
162 Sun Feb 17 18:03:12 EET 2013 project.clj
129 Sun Feb 17 19:23:54 EET 2013 some/Example.clj
那是一些。示例类只包含main方法,不包含foo:
$ javap some.Example
public class some.Example {
public static {};
public some.Example();
public java.lang.Object clone();
public int hashCode();
public java.lang.String toString();
public boolean equals(java.lang.Object);
public static void main(java.lang.String[]);
}
所以问题是:我们如何指定一个clj Clojure文件来生成一个Java类,该类包含许多静态和实例方法,目的是从Java代码中调用这些方法?
(defproject some/example "1.0.0"
:description "A sample project"
:dependencies [[org.clojure/clojure "1.4.0"]]
:aot [some.Example]
:source-paths ["."]
)
你需要声明你的类将要拥有的方法:
(ns some.Example
(:gen-class
:methods [[foo [] String]]))
请注意,这将foo声明为非静态方法,因此它还需要使用一个this
参数:
(defn -foo [this]
"foo bar")
如果希望方法是静态的,需要附加一些元数据:
(ns some.Example
(:gen-class
:methods [#^{:static true}[bar [] int]]))
(defn -bar []
3)
试着读这篇文章,它会更快地切入要点。
我正在使用英特尔SSE/AVX/FMA内部函数来实现一些数学函数的完美内联SSE/AVX指令。 给定以下代码 clang 3.9生成的程序集-march=x86-64-mfma-O3 虽然为sqrt生成的代码很好,但与std fma(依赖于编译器内部std::fma)相比,fma中存在不必要的VxORP(将绝对未使用的xmm3寄存器设置为零)和MOVS指令 GCC 6.2生成的程序集-march=
我最近开始学习Clojure,想知道是否有一种执行简单. clj文件的标准方法。 我已经安装了Leiningen,并创建了我的第一个项目称为我的东西使用lein新应用程序我的东西。 管理我的东西。core,我从lein run开始: 接下来,我尝试了lein repl,接着是: 我还使用lein repl进行了一些基本评估: 我试着在我的东西里定义这个函数。核心: 我得到以下错误:clojure.
Compiler functions are called only during compilation of the template. They are useful for injecting PHP code or time-sensitive static content into the template. If there is both a compiler function a
问题内容: 我是ReactJS的新手,正在尝试了解什么是将代码部署到生产中的最佳方法。按照下面的链接,我正在使用babel作为下面的代码进行构建,但是我想知道 这是否很好,或者是否有 将ReactJS部署到生产中的 其他最佳实践 : http://www.sitepoint.com/getting-started-react- jsx/ 这是我的index.html和main.js文件: inde
我试着实现了一个列表容器,并决定将一些通用函数如< code>sum()移到基类,这样我就可以在其他容器中重用它们。 所有的基本支持类需要的是三个方法 empty()、 和 。我不能使这些纯粹的虚拟,因为支持类永远不会被实例化。但它仍然必须使用这些方法来实现自己的方法,如 我试过这样的东西: 但是尝试使用< code>sum()会导致编译错误 对于、和中的每一个。 有什么建议吗?
void unregister_compiler_function(string name) Use this to dynamically unregister a compiler function. Pass in the name of the compiler function. 动态注销一个编译函数,参数name是编译函数的名称。