我知道在STM事务中放置具有副作用的函数通常是不好的做法,因为它们可能被重试并多次调用.
然而,我发现你可以使用代理来确保只有在事务成功完成后才能执行副作用.
例如
(dosync
// transactional stuff
(send some-agent #(function-with-side-effects params))
// more transactional stuff
)
Run Code Online (Sandbox Code Playgroud)
这是好习惯吗?
有哪些优点/缺点/陷阱?
我正在尝试用函数编程风格编写游戏,这意味着用纯粹功能的,不可变的数据结构来表示游戏状态.
最重要的数据结构之一是表示世界的3D网格,其中对象可以存储在任何[x,y,z]网格位置.我想要这个数据结构的属性是:
有关最佳数据结构的建议吗?
PS我知道这可能不是最实用的写游戏方式,我只是把它作为一种学习经验并用FP来扩展我的能力......
我正在用Java开发一个开源库,并希望确保它对Java 8用户来说很方便,并尽可能利用Java 8中的新概念(lambdas等)
同时我绝对需要保持向后兼容性(库必须仍然可以用于使用Java 6或7的人).
我可以采用Java 8有哪些有用的功能,这对于库用户来说是有益的,而不会破坏旧Java版本用户的库兼容性?
我正在尝试使用Clojure动态生成可应用于大量数据的函数 - 即要求是将函数编译为字节码以便快速执行,但是直到运行时才能知道它们的规范.
例如,假设我使用简单的DSL指定函数,例如:
(def my-spec [:add [:multiply 2 :param0] 3])
Run Code Online (Sandbox Code Playgroud)
我想创建一个函数compile-spec,使得:
(compile-spec my-spec)
Run Code Online (Sandbox Code Playgroud)
将返回一个返回2x + 3的参数x的编译函数.
在Clojure中最好的方法是什么?
所有,
我正在设计基于云的服务,它将提供执行客户提交的一些"插件"代码的选项.为了完成这项工作,插件不能威胁系统完整性或具有访问其他客户端数据的能力.
理想情况下,我希望客户端可以提交一个简单的jar文件(包含符合某些预定义接口的类),然后在沙箱中运行.
应允许客户端代码:
但我特别需要禁止以下内容:
是否可以使用自定义ClassLoader/SecurityManager设置来实现此目的?或者我是否需要开始寻找更复杂的解决方案(例如启动多个JVM?)
是否有一个库可以确定jdbc驱动程序类使用的相应验证查询?
例如,如果jdbc驱动程序是com.mysql.jdbc.Driver或com.mysql.jdbc.jdbc2.optional.MysqlXADataSource,则库将知道验证查询是"SELECT 1"
c3po http://www.mchange.com/projects/c3p0/index.html#preferredTestQuery
dbcp http://commons.apache.org/dbcp/configuration.html"validationQuery "
是否可以在运行的 Clojure REPL中下载并安装以前未指定的Maven依赖项?
我想到了一个相当常见的情况,你想要为某些测试或可视化工具暂时快速引入依赖关系,但不想关闭当前的REPL会话.
例如,如果您想在当前的REPL会话中使用Incanter绘制一些漂亮的数据图表,则可以使用以下内容:
(load-dependency "incanter" "incanter" "1.3.0-SNAPSHOT")
;; now do stuff with Incanter......
Run Code Online (Sandbox Code Playgroud)
据推测,您必须从适当的存储库中触发Maven或Leiningen中的依赖性解析/加载,但我不了解它们的内部结构,以了解这是否可能在运行时.....
必须有一个简单的方法来做到这一点,我显然想念它:|
如何在clojure中的列表\序列中添加项目(区别不明确)?
我尝试过以下方法:
Clojure> (add [1 2 3])
java.lang.RuntimeException: Unable to resolve symbol: add in this context
Clojure> (+ [1 2 3])
java.lang.ClassCastException: Cannot cast clojure.lang.PersistentVector to java.lang.Number
Clojure> (apply merge-with + [1 2 3])
java.lang.IllegalArgumentException: Don't know how to create ISeq from: java.lang.Long
Clojure> (add-items [1 2 3])
java.lang.RuntimeException: Unable to resolve symbol: add-items in this context
Run Code Online (Sandbox Code Playgroud) 我正在设计一个Java中的API,用于一组数字算法,这些算法作用于双精度数组(用于实时金融统计).出于性能原因,API必须使用原始数组,因此List<Double>不是一种选择.
典型的用例可能是一个算法对象,它接受两个输入数组,并返回一个输出数组,其中包含从两个输入计算的结果.
我想就如何在API中使用数组参数建立一致的约定,特别是:
someFunction(double[] input, int inputOffset, int length)目标是实现API用户的效率,简单性以及API内部和已建立的约定之间的一致性.
显然有很多选择,那么最佳的整体API设计是什么?
我在Eclipse中有大量的Maven项目,有很多依赖项.
随着新版本的发布,一些依赖项经常在存储库中更新.目前我必须手动查看这些内容,并手动编辑相应的pom.xmls以使用新版本.
是否有自动方法在Eclipse中执行以下操作:
pom.xml(如"快速修复"功能)?java ×6
clojure ×4
maven ×2
agent ×1
api-design ×1
architecture ×1
cloud ×1
concurrency ×1
dynamic ×1
java-8 ×1
jdbc ×1
leiningen ×1
plugins ×1
pom.xml ×1
security ×1
stm ×1
transactions ×1
validation ×1