Scala

継承とかmixinとか。

Scalaには、traitというキーワードがあって、mixin専用のクラスというか、objectを作る事が出来たりするですな。 こいつは、中々に面白い。

Structural Subtyping の実装。

何日か前に痺れたStructural Subtypingが.scalaから.classにコンパイルされると、 どういう実装になっているのか気になったので、jadってみますた。

::の件、続き。

scala.Listの中に、 sealed abstract class List[+A] extends Seq[A]こんなクラスがありましたよ。 このクラスは、こんなメソッドを持っているます。 def ::[B >: A] (x: B): List[B] = new scala.::(x, this)昨日、抜粋したcase class の::が何故、いきなり…

car とか cdr の件。

カーとかクダーとか、聞いて、::が何故case classなのか分かりましたよ。 ちなみに、scala.Listには、 こんなcase classもありましたよ、やりましたね。 @SerialVersionUID(0 - 8256821097970055419L) case object Nil extends List[Nothing] { override def…

昨日のDuck Typingモドキなアレ。

structural subtyping と言うらしい。 関数型言語とは、どうやら直線的に関係がある訳でも無いみたい。 まぁ、何か色々議論がある様だけども、良く分からんので、後回し…とす。

::とか:::の件。

ソースコードをダウンロードしたら、疑問は氷解した。Listに、::ってcase classが定義されていた。 @SerialVersionUID(0L - 8476791151983527571L) final case class ::[B](private var hd: B, private[scala] var tl: List[B]) extends List[B] { def head …

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

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(…</:></:anyval](val>

で、一体何が起きてるん?

println(List(1,2) :: List(3,4)) println(List(1,2) ::: List(3,4)) コンソールには、 List(List(1, 2), 3, 4) List(1, 2, 3, 4) と言う風に出力さりる。 一体どうなったら、こういう結果になるのだろうか。ワカラン…

恐るべし・・・

何かと出遅れた感タプシなのだけど、ちょっと触ってみてる。 package aaa object Flyers { class Bird(val name: String) { def fly(height : int) { Console.println("I'm Fly") } } class Plane(val callsign: String) { def fly(height : int) = { printl…