click below
click below
Normal Size Small Size show me how
Scala
Case Class
Term | Definition |
---|---|
1. abstract class Term 2. case class Var(name: String) extends Term 3. case class Fun(arg: String, body: Term) extends Term 4. case class App(f: Term, v: Term) extends Term | Case Classes. Scala suporta a noção de Case Class. Case Class são classes regulares que exportam os seus parâmetros do construtor e que fornecem um mecanismo de decomposição recursiva via pattern matching. |
1. Fun("x", Fun("y", App(Var("x"), Var("y")))) | Esta hierarquia de classe pode ser usada para representar untyped lambda calculus. Para facilitar a construção de instâncias de case class, Scala não exige que o new primitivo seja usado. Pode-se simplesmente usar o nome da classe como uma função. |
1. val x = Var("x") 2. println(x.name) | Os parâmetros do construtor das case class são tratados como valores públicos e podem ser acessados diretamente. |
1. val x1 = Var("x") 2. val x2 = Var("x") 3. val y1 = Var("y") 4. println("" + x1 + " == " + x2 + " => " + (x1 == x2)) 5. println("" + x1 + " == " + y1 + " => " + (x1 == y1)) | Para cada case class o compilador Scala gera um método equals que implementa a igualdade estrutural e um método toString iguais. |
1. Var(x) == Var(x) => true 2. Var(x) == Var(y) => false | Imprimirá |