2012年6月3日日曜日

scala.sys.Processのシンタックスシュガーでコンパイルエラー

簡単な運用スクリプトをscala移行をおこなっていて、ちょっと悩み中。
scala.sys.Processを使っていて、下記のようなコードを書きました。
import scala.sys.process._
val result ="df -k"!!
println(result)

コンパイルしてみると、
> compile
[info] Compiling 1 Scala source to /Users/kazuhiro/work/scala/sbt_project/sample_project/target/scala-2.9.0-1/classes...
[error] /Users/kazuhiro/work/scala/sbt_project/sample_project/src/main/scala/Sample.scala:28: recursive value result needs type
[error]  println(result)
[error]          ^
[error] /Users/kazuhiro/work/scala/sbt_project/sample_project/src/main/scala/Sample.scala:28: type mismatch;
[error]  found   : Unit
[error]  required: scala.sys.process.ProcessLogger
[error]  println(result)
[error]         ^
[error] two errors found
[error] {file:/Users/kazuhiro/work/scala/sbt_project/sample_project/}default-fc0f5b/compile:compile: Compilation failed
[error] Total time: 2 s, completed 2012/06/02 11:22:44
次に以下のように!!の行に一行あけてみると。
import scala.sys.process._
val result ="df -k"!!

println(result)
コンパイルが問題なく通る。 シンタックスシュガーに改行が必要だとシンタックスシュガーにならんじゃないの? REPLで上記コードを入力した場合は、問題なく実行されるので、本来ならば問題はないんだろうなぁ。。 環境は
mac OS X 10.7.4
scala-2.9.0-1
追記:2012/06/05

とりあえず謎の空行の対策としては、セミコロンを入れればコンパイルエラーはなくなる事が判明。 うぅーん。なぞだ。