コンパイルエラーにならなかった
あら、通るの。
def foo(): Future[Unit] = Future.successful(100)
型階層の確認
http://www.scala-lang.org/api/2.12.1/scala/concurrent/Future.html
Future型は Future[+T]
で型パラメータは共変指定。
上記のコードがコンパイルが通るということはInt型はUnit型のサブクラスじゃないといけないわけだが
scala> 100.isInstanceOf[Unit]
res0: Boolean = false
ふむ。
なお、Unit型はAnyValを継承してfinalが付けられている。
http://www.scala-lang.org/api/2.12.1/scala/Unit.html
コンパイルの様子を見る
❯❯❯❯ scala -Xprint:typer -e 'def foo(): scala.concurrent.Future[Unit] = scala.concurrent.Future.successful(100)'
出力内容を抜粋して、
....
private def foo(): scala.concurrent.Future[Unit] = scala.concurrent.Future.successful[Unit]({
100;
()
})
....
なるほどー。
そういうわけかー。
その他にも、
val x: Unit = "hello, world!"
これもコンパイルは通る。もう予想はつくが -Xprintして 抜粋して、、、
....
private[this] val x: Unit = {
"hello, world!";
()
};
....