以下作品。结果是“你好世界”
(def ^Callable f (fn [] "hello world"))
(let [e (java.util.concurrent.Executors/newSingleThreadExecutor)]
(try
(.get (.submit e f))
(finally (.shutdown e))))
但以下没有。结果get
是nil
(def e (java.util.concurrent.Executors/newSingleThreadExecutor))
(.get (.submit e f))
为什么?f
我通过用有副作用的东西替换它来检查它是否被调用。我能看到的唯一区别是在一个和另一个中e
使用绑定。let
def
另一个问题。如果我没有第一个示例的^Callable
类型提示,f
则安静地返回nil
。它不应该为提交调用抛出异常“找到多个匹配方法”,因为f
两者都是Runnable
and Callable
?如果我定义如下f
使用let
,则抛出异常
(let [e (java.util.concurrent.Executors/newSingleThreadExecutor)]
(let [f (fn [] "hello world2")]
(try
(.get (.submit e f))
(finally (.shutdown e)))))
谢谢