Scala铸造和避免安装

Scala铸造和避免安装,scala,Scala,在下面的代码中,是否可以在不使用INSTANCEOF的情况下重新格式化?我发现一些样式指南建议应该避免使用instanceof/isInstanceOf,并且我设法清理了我的代码,除了下面所示的用法 我确实发现了一个重复的问题,但对于这个特定的案例,它并没有真正帮助我,或者我只是一个初学者,无法将它翻译成我自己的用例 trait pet {} class dog extends pet { def bark: String = { "WOOF" } } def test(wha

在下面的代码中,是否可以在不使用INSTANCEOF的情况下重新格式化?我发现一些样式指南建议应该避免使用instanceof/isInstanceOf,并且我设法清理了我的代码,除了下面所示的用法

我确实发现了一个重复的问题,但对于这个特定的案例,它并没有真正帮助我,或者我只是一个初学者,无法将它翻译成我自己的用例

trait pet {}
class dog extends pet {
  def bark: String = {
    "WOOF"
  }
}

def test(what: pet) : String =
{
  what match {
    case _:dog =>
      val x = what.asInstanceOf[dog]
      x.bark
  }
}

test(new dog())
例如,我试过:

val x = what : dog

但这似乎不起作用。

您可以在case部分指定您期望的
dog
对象:

case x: dog => x.bark
但现在,如果将非dog对象传递给您的方法,您可能会收到
scala.MatchError
。因此,您需要添加具有如下理想行为的默认情况:

case _ => "unknown pet"