記号をメソッド名に使えるとこういう事になるから困る。
def main(args: Array[String]) { class Stack[A <:AnyVal](val elem:A) { def >>[B <: A](newone: B): Stack[B] = new Stack[B](newone) { override def toString() = newone.toString() + " " + Stack.this.toString() } override def toString() = elem toString } var s = new Stack(10) >> 4 >> 11 >> 6 >> 1 println(s) }
こいつを実行すると、
1 6 33 4 10
となる。
Scalaには、基礎的な型に関する罠がそれなりに埋め込まれている模様。
- scala.AnyValとjava.lang.Numberは違う
- scala.Anyとjava.lang.Objectは違う。
- int は、scala.Intの別名である。つまり、java.lang.Integerの別名ではない。
そんな感じ。