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 件のコメント:
コメントを投稿