에 다음 작품을 기능을 제출 한 후 미래의 결과를 얻기. 그 결과에 "Hello World"는 java.util.concurrent.ExecutorService
(def ^Callable f (fn [] "hello world"))
(let [e (java.util.concurrent.Executors/newSingleThreadExecutor)]
(try
(.get (.submit e f))
(finally (.shutdown e))))
하지만 다음은하지 않습니다. get
의 결과는
(def e (java.util.concurrent.Executors/newSingleThreadExecutor))
(.get (.submit e f))
왜 nil
입니까? 나는 f
이 부작용이있는 무언가로 대체하여 호출되는 것을 확인했습니다. 내가 볼 수있는 유일한 차이점은 e
하나와 다른 def
에 let
를 사용하여 결합되어 있다는 점이다.
또 다른 질문입니다. f
에 대한 ^Callable
유형 힌트가없는 경우 첫 번째 예제는 자동으로 nil
을 반환합니다. f
모두 Runnable
및 Callable
때문에 그것은 제출 호출에 대해 "하나 개 이상의 일치하는 메소드가 발견"예외가 발생하지 않나요? 나는 다음 예외가 발생 다음과 같은
(let [e (java.util.concurrent.Executors/newSingleThreadExecutor)]
(let [f (fn [] "hello world2")]
(try
(.get (.submit e f))
(finally (.shutdown e)))))
감사