评论由:favila 制作
我确认此问题在CLJ 1.8和master(1.9)版本中依然存在,使用的是Java 8。
我能够诊断出问题的原因。问题在于PHMs的{{.fold}}方法为{{Callable}}(而不是一个{{IFn}})创建了一个要由{{fjinvoke}}调用的对象,但是{{fjinvoke}}会像调用一个普通的clojure函数({{IFn .invoke}})一样调用它的参数。这是唯一一个提供给{{fjinvoke}}原生{{Callable}}的Clojure-core可折叠数据结构。通常这个问题不会出现,因为任务不是在运行的任务中调用,但是一个嵌套的折叠是在一个已经运行的任务中执行的,并会到达{{fjinvoke}}中的{{(f)}}行并崩溃。
由于Clojure函数本身也是{{Callable}},所以我修复的办法是使{{fjinvoke}}接收一个{{Callable}}并将参数{{.call}},而不是调用它。另一种修复办法是将PHMs的{{.fold}}修改为创建更像Clojure函数的对象(可调用并可调用)。