case class Neko(name:String,pattern:String, age:Int)
trait CatManage {
self: CatManage with DefNekoCheck =>
var nekoz:List[Neko]
def init():Unit
def lookupCat(name:String):Neko
}
trait DefNekoCheck {
def ? (neko:Neko) = neko != null
}
trait NekoCheck extends DefNekoCheck {
override def ? (neko:Neko) = neko.name == "NA"
}
trait NekozManage extends CatManage with NekoCheck {
override var nekoz = List[Neko]()
override def init():Unit = {
nekoz ::= Neko("Mikeyo", "Mike", 3)
nekoz ::= Neko("Tora", "Chatora", 8)
nekoz ::= Neko("Powder", "Mike", 8)
nekoz ::= Neko("Machiko", "Mike", 10)
}
override def lookupCat(name:String):Neko = {
val n = nekoz find(_.name == name)
n.getOrElse(Neko("NA", "NA", -1))
}
}
trait Act {
def start(f: => List[String])
}
trait App {
self: Act with CatManage =>
override def start(execPlan: => List[String]) = {
init
val l = execPlan
l.foreach{ name =>
lookupCat(name) match {
case x if x.name == "NA" => println(s"${name} not found..")
case x => println(x)
}
}
}
}
水曜日, 12月 23, 2015
Scala - Mixin, traitそしてselfによる型間依存関係の表現
Scalaのmixinとtraitそしてselfアノテーションを利用することにより,Javaと比較してより明快に型間の依存関係を宣言出来る.Javaではミックスインが出来ない為,クラス間の依存関係はあるクラスのprivate or protectedフィールドとして表現されていることがご想像いただけるかと思う.
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿