【scala初学】class,object,case classes
前の章ではclass,objectの違いを理解し,簡単に振り返った.
calss静的テンプレート(従来のclassと理解すればよい)
object単例クラス、objectにポイント補完
1.一例である以上、object名SharkObjでは書けないnew
2.直接クラス名呼び出し方法を書くことができ、SharkObjに方法m(x:Int)があると仮定する.
case classesは何をしていますか?彼を普通のclassと理解することができますが、少し違います.以下にまとめます. newを書く必要はありませんが、 と書くことができます.デフォルトはpublicであり、 は任意の場所で呼び出されます.デフォルトではtoString が実装されています.は継承できません
case calssに対する疑問の声が高く、価値がないと感じます.公式原文:
It makes only sense to define case classes if pattern matching is used to decompose data structures.
もちろん、pattern matchingの下で意味があるという話だけは過激で、少なくとも一部のベテランプログラマーは他の意見を持っています.
get auto-generated equals, hashCode, toString, static apply() for shorter initialization, etc.
ここで簡単に表すと、match caseの制御文と理解される
以下、公式の例を皆さんに貼ります.
calss静的テンプレート(従来のclassと理解すればよい)
object単例クラス、objectにポイント補完
1.一例である以上、object名SharkObjでは書けないnew
//var so = new SharkObj //error
var so = SharkObj //
2.直接クラス名呼び出し方法を書くことができ、SharkObjに方法m(x:Int)があると仮定する.
SharkObj.m(1)
case classesは何をしていますか?彼を普通のclassと理解することができますが、少し違います.以下にまとめます.
case calssに対する疑問の声が高く、価値がないと感じます.公式原文:
It makes only sense to define case classes if pattern matching is used to decompose data structures.
もちろん、pattern matchingの下で意味があるという話だけは過激で、少なくとも一部のベテランプログラマーは他の意見を持っています.
get auto-generated equals, hashCode, toString, static apply() for shorter initialization, etc.
ここで簡単に表すと、match caseの制御文と理解される
以下、公式の例を皆さんに貼ります.
abstract class Term
case class Var(name: String) extends Term
case class Var1 extends Term
case class Fun(arg: String, body: Term) extends Term
case class App(f: Term, v: Term) extends Term
object TermTest extends scala.App {
def printTerm(term: Term) {
term match {
case Var(n) =>
print(n)
case Fun(x1, b) =>
print("^" + x1 + ".")
printTerm(b)
case App(f, v) =>
print("(")
printTerm(f)
print(" ")
printTerm(v)
print(")")
}
}
def isIdentityFun(term: Term): Boolean = term match {
case Fun(x, Var(y)) if x == y => true
case _ => false
}
val id = Fun("x", Var("x"))
val t = Fun("x", Fun("y", App(Var("x"), Var("y"))))
printTerm(t)
println
println(isIdentityFun(id))
println(isIdentityFun(t))
println(new Var1==new Var1);
println(new Var("")==new Var("1"));
}