首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Clojure Java互操作内存模型

Clojure Java互操作内存模型
EN

Stack Overflow用户
提问于 2014-02-27 21:06:29
回答 1查看 155关注 0票数 2

Clojure的内存模型是如何为Java互操作工作的?在运行Java库函数时,JVM是否使用Clojure的持久化内存模型,或者Java函数的结果在返回时是否被强制转换为持久值?

EN

回答 1

Stack Overflow用户

发布于 2014-02-27 21:59:06

Clojure的持久内存模型是语言约束的构造和不可变数据结构库(用Java实现)。它不适用于Java互操作。

  • 并没有意识到这一点。
  • Java函数的结果按原样返回。

Java互操作旨在让您以Java方式直接访问所需的任意数量的Java内容。您可以很容易地使用它来破坏Clojure持久内存模型。例如..。

代码语言:javascript
复制
=>(let [arr (double-array (range 5))]
    (aset-double arr 3 45.2) arr)
[0.0, 1.0, 2.0, 45.2, 4.0]

您不能对Java数组执行Clojure操作

代码语言:javascript
复制
=> (assoc (to-array (range 5)) 2 67.4)
ClassCastException [Ljava.lang.Object; cannot be cast to clojure.lang.Associative  clojure.lang.RT.assoc (RT.java:702)

或将Java内容添加到Clojure数组

代码语言:javascript
复制
=> (aset (vec (range 5)) 2 67.4)
IllegalArgumentException No matching method found: aset clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:80)

如果你尝试用Java语言进行赋值,我想你会在运行时得到一个UnsupportedOperationException

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

https://stackoverflow.com/questions/22069436

复制
相关文章

相似问题

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