技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

Scala 2.10 で新札された Future 今回は進んで使ってみよう

まず 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 と比べられるとまだ長いんだけどさ)