記号をメソッド名に使えるとこういう事になるから困る。

    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の別名ではない。

そんな感じ。