使用当前对象的模式匹配

时间:2015-02-12 03:01:14

标签: scala pattern-matching

我正在尝试匹配Option,并测试是否包含发出呼叫对象的Some。所以我想写的代码如下:

methodReturningOption() match {
    case Some(this) => doSomething()
    case _ => doSomethingElse()
}

但无法编译,错误

  

''预期但'''找到了

我也尝试使用Some(`this`)来提供错误

  

未找到:重视此

如果我添加一个引用this

的变量,我可以使它工作
val This = this
methodReturningOption() match {
    case Some(This) => doSomething()
    case _ => doSomethingElse()
}

但这看起来很难看,似乎是一种不愉快的解决方法。是否有一种更简单的模式匹配方式this作为参数?

2 个答案:

答案 0 :(得分:4)

我想你可以试试这个:

methodReturningOption() match {
  case Some(x) if x == this => doSomething()
  case _ => doSomethingElse()
}

答案 1 :(得分:1)

看起来this被视为特殊关键字,无法在该上下文中使用。

Jack Leow的解决方案可能是最好的 - 我建议继续使用它,因为它更明确。但是作为替代方案,您还可以创建一个变量指向“这个'使用以下语法。 (注意第一行的self =>

class Person { self =>
    def bla() = methodReturningOption() match {
        case Some(`self`) => ???
        case _          => ???
    }
}

这并没有真正回答这个问题,它只是一种可能对您有用的替代语法。