まず Java の Future(1.6だっけか?)からの変換しようがあるのかと思ったら
scala.concurrent.Future wrapper for java.util.concurrent.Future - Stack Overflow
JFuture (get()取得)をブロッキングなしで SFuture (onComplete()取得)にラップはできないよ。なんせIFが違いすぎるもの。
とか言うので、無理はしない。
っつーか http://hc.apache.org/httpcomponents-client-4.3.x/index.html の非同期が地味にめんどい。
普通に同期処理をラップした方がいいね。
・・・
・・・・
いやちょっとまって。
def get(url: String)(implicit requestOption: RequestOption = options): Response = { val setting = new HttpGet(url) requestOption.inject(setting) Response(withClient(setting, requestOption)) }
これを Future で非同期しようと思ったわけだけど。
import scala.concurrent._ import ExecutionContext.Implicits.global def asyncGet(url: String)(implicit requestOption: RequestOption = HTTP.options): Future[Response] = { future { HTTP.get(url) } }
これはなんか、、、、ライブラリ書く意味あんの?(;´・ω・)
後は onComplete/onSuccess とかで待ち受ければよいし、map して出力返るのもありなわけで。
つまり何が言いたいかというと、、、。
コンパイル言語でこれは流石に短すぎないか?ってコトで。(いや GO と比べられるとまだ長いんだけどさ)