使用当前对象进行模式匹配
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 _ => ???
}
}
这并没有真正回答问题,它只是一种可能对您有用的潜在替代语法。
我正在尝试匹配 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 _ => ???
}
}
这并没有真正回答问题,它只是一种可能对您有用的潜在替代语法。