首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ClojureCLR强制错误

ClojureCLR强制错误
EN

Stack Overflow用户
提问于 2013-04-06 11:29:48
回答 1查看 88关注 0票数 1

我在ClojureCLR REPL中得到了一个编译器异常,用于基本强制:

代码语言:javascript
复制
=> (class 12)
System.Int64

=> (class 12.34)
System.Double

=> (class (new System.Double 12))
CompilerException System.InvalidOperationException: No constructor in type: Double with 1 arguments
at clojure.lang.CljCompiler.Ast.NewExpr.ComputeCtor() in D:\work\clojure-clr-1.4.1-fix\Clojure\Clojure\CljCompiler\Ast\NewExpr.cs:line 73
at clojure.lang.CljCompiler.Ast.NewExpr..ctor(Type type, List`1 args, IPersistentMap spanMap) in D:\work\clojure-clr-1.4.1-fix\Clojure\Clojure\CljCompiler\Ast\NewExpr.cs:line 49
at clojure.lang.CljCompiler.Ast.NewExpr.Parser.Parse(ParserContext pcon, Object frm) in D:\work\clojure-clr-1.4.1-fix\Clojure\Clojure\CljCompiler\Ast\NewExpr.cs:line 117
at clojure.lang.Compiler.AnalyzeSeq(ParserContext pcon, ISeq form, String name) in D:\work\clojure-clr-1.4.1-fix\Clojure\Clojure\CljCompiler\Compiler.cs:line 1560, compiling: (NO_SOURCE_PATH:60)

如果这是一个新问题,很抱歉,但它的行为与Java互操作不同!

.NET的语法是否有所不同?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-06 12:13:42

ClojureCLR中的互操作非常类似于Clojure中的互操作,但平台差异确实通过。

与System.Double相比,java.lang.Double是一个非常不同的生物。JVM的Double是一个包装类,它不同于原始double值的类。CLR的Double实际上是原始double值的类。在S.Double中,j.l.Double有许多无法与之匹敌的方法。Re你的例子: j.l.Double有几个构造函数;S.Double没有构造函数。要实现您想要的功能,请使用clojure.core/double:

代码语言:javascript
复制
user=> (class (double 2))
System.Double

Java包装器类型可能会遇到平台差异: CLR没有显式的包装器类型。我不知道有任何地方试图详细报道这一点。

有关如何处理JVM虚拟机之外的东西的CLR interop的提示,例如by-ref参数、枚举等,请查看the wiki on the github repo for ClojureCLR

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15846732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档