使用当前对象进行模式匹配

Pattern matching using current object

我正在尝试匹配 Option,并测试它是否是包含进行调用的对象的 Some。所以我要编写的代码如下所示:

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

但是编译失败,出现错误

'.' expected but ')' found

我也试过使用 Some(`this`) 却给出了错误

not found: value this

如果我添加一个引用 this

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

但这看起来很难看,而且似乎是一种令人不快的解决方法。有没有更简单的方法来以 this 作为参数进行模式匹配?

我想你可以试试这个:

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

看起来 this 被认为是一个特殊的关键字,不能在该上下文中使用。

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

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

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