import play.api.libs.concurrent.Akka import play.api.Play.current import akka.util.duration.intToDurationInt Akka.system.scheduler.schedule(0 seconds, 1 minutes) { println("test") }
第1引数は初期遅延時間、第2引数はインターバルです。
Akkaを直で使っている感があって、どうなんよ?と思わなくもない。
「0 seconds」「1 minutes」という書き方はint型である0や1が暗黙変換関数のintToDurationIntによってDurationInt型に変換され、そこからさらにそのメソッドである「seconds」「minutes」によってDuration型に変換されるというScalaの必殺技。(^^;;;
細かいことを考えなければ便利なんだろうけど、初回使用の際にはどういう変換が行われているのかをちゃんと調べないと気持ち悪いので逆に面倒な気もしないでもない。
ちなみに暗黙変換を使用しない場合は引数は
new FiniteDuration(1, TimeUnit.MINUTES)
のようになって微妙な感じなんでAPI開発者の意図としては常に暗黙変換を使ってね、ってことなんでしょう。
最初のコードはまったくAPIを知らない状態で見てもなんとなく意味がわかるという点で優れていると思うけど、ちゃんと使いこなそうと思ったらちょっとハードル高いかなぁ。。。
書きながら気がついたけど、Playframework側でAkkaをラップしたAPIを用意しようとしても結局はAkka側の暗黙変換関数もimportしないといけないのでそれでこんな形になったのかも。