如何获取某个特征的 val 实例的 class?
How to get the class of a certain trait's val instance?
抱歉,如果我的问题很愚蠢,但我是 Scala 初学者。我有类似以下内容:
trait Pet {
val name: String
}
class Cat(val name: String) extends Pet
class Dog(val name: String) extends Pet
def eval(animal: Pet): returnType = {
...
}
我正在尝试以不同的方式操纵动物,无论是猫还是狗。
到目前为止,这是我尝试过的方法:
def eval(animal: Pet): returnType = {
if (animal.type == Cat) {
print("This is cat")
}
else {
print("This is dog")
}
}
但是,这是行不通的。有什么建议吗?
作为一般规则,不要在 trait
中使用 val
,除非您确切知道 class 树的初始化工作原理。
实际问题可以用case class
和match
来解决:
trait Pet {
def name: String
}
case class Cat(name: String) extends Pet
case class Dog(name: String) extends Pet
def eval(animal: Pet) =
animal match {
case Cat(name) =>
print("This is cat")
case Dog(name) =>
print("This is dog")
}
抱歉,如果我的问题很愚蠢,但我是 Scala 初学者。我有类似以下内容:
trait Pet {
val name: String
}
class Cat(val name: String) extends Pet
class Dog(val name: String) extends Pet
def eval(animal: Pet): returnType = {
...
}
我正在尝试以不同的方式操纵动物,无论是猫还是狗。 到目前为止,这是我尝试过的方法:
def eval(animal: Pet): returnType = {
if (animal.type == Cat) {
print("This is cat")
}
else {
print("This is dog")
}
}
但是,这是行不通的。有什么建议吗?
作为一般规则,不要在 trait
中使用 val
,除非您确切知道 class 树的初始化工作原理。
实际问题可以用case class
和match
来解决:
trait Pet {
def name: String
}
case class Cat(name: String) extends Pet
case class Dog(name: String) extends Pet
def eval(animal: Pet) =
animal match {
case Cat(name) =>
print("This is cat")
case Dog(name) =>
print("This is dog")
}