Scala公式サイトにあるSnippetを淡々と学んでいきます。
サンプルコードはコピペしちゃだめ!必ず手打ち!写経していきます。
Snippet: Abstract Types | The Scala Programming Language
package sample.snippet object AbstractTypes extends Application { abstract class Buffer { type T val element: T } def newIntBuffer(el: Int) = new Buffer { type T = Int val element = el } println("要素は" + newIntBuffer(1).element) abstract class SeqBuffer { type T val element: Seq[T] def length = element.length } def newIntBuffer(el: Int*) = new SeqBuffer { type T = Int val element = el } println("要素の長さは" + newIntBuffer(1, 2, 3).length) println("要素の長さは" + newIntBuffer(1, 2, 3, 4, 5).length) }
特に目新しいことはないかな。。。
Seq[T]のSeqはtraitでScalaの組み込みクラス。Listとかのスーパークラス。
Tはジェネリクスだろうね。
Int*は可変長引数。
def newIntBuffer(el: Int)はクラスを定義してるんじゃなくて、関数を定義してるんだろう。
実行結果。
要素は1 要素の長さは3 要素の長さは5