En Scala no es la clase caso, que en realidad es una clase ordinaria. Pero su clase y ordinario ligeramente diferente, de la siguiente manera:
1, la inicialización cuando se puede no es nuevo, por supuesto, también se puede añadir, cierta categoría general necesidad de añadir nuevos;
scala>
case
class
Iteblog(name
:
String)
defined
class
Iteblog
scala>
val
iteblog
=
Iteblog(
"iteblog_hadoop"
)
iteblog
:
Iteblog
=
Iteblog(iteblog
_
hadoop)
scala>
val
iteblog
=
new
Iteblog(
"iteblog_hadoop"
)
iteblog
:
Iteblog
=
Iteblog(iteblog
_
hadoop)
|
2, toString lograr más bella;
scala> iteblog
res
5
:
Iteblog
=
Iteblog(iteblog
_
hadoop)
|
3, la implementación predeterminada de iguales y hashCode;
scala>
val
iteblog
2
=
Iteblog(
"iteblog_hadoop"
)
iteblog
2
:
Iteblog
=
Iteblog(iteblog
_
hadoop)
scala> iteblog
==
iteblog
2
res
6
:
Boolean
=
true
scala> iteblog.hashCode
res
7
:
Int
=
57880342
|
4, el valor predeterminado se serializa, que se realiza Serializable;
scala>
class
A
defined
class
A
scala>
import
java.io.
_
import
java.io.
_
scala>
val
bos
=
new
ByteArrayOutputStream
bos
:
java.io.ByteArrayOutputStream
=
scala>
val
oos
=
new
ObjectOutputStream(bos)
oos
:
java.io.ObjectOutputStream
=
java.io.ObjectOutputStream
@
4
c
257
aef
scala> oos.writeObject(iteblog)
scala>
val
a
=
new
A
a
:
A
=
$iwC$$iwC$A
@
71687
b
10
scala> oos.writeObject(a)
java.io.NotSerializableException
:
$iwC$$iwC$A
|
5, heredará automáticamente de scala.Product alguna función;
6, constructor de la clase caso parámetro es nivel público, que tenga acceso directo;
scala> iteblog.name
res
11
:
String
=
iteblog
_
hadoop
|
7, el apoyo a la coincidencia de patrones;
de hecho, la sensación de clase caso debe ser el más importante admita la función de coincidencia de patrones. Esta es la única razón por la que definimos la clase caso, no es de extrañar Scala funcionario también dijo: que tiene sentido sólo el definir clases caso si se utiliza para la coincidencia de patrones para descomponer las estructuras de datos. . Consideremos el siguiente ejemplo:
object
TermTest
extends
scala.App {
def
printTerm(term
:
Term) {
term
match
{
case
Var(n)
=
>
print(n)
case
Fun(x, b)
=
>
print(
"^"
+ x +
"."
)
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))
}
|