【问题标题】:Pattern matching using current object使用当前对象进行模式匹配
【发布时间】:2015-02-12 03:01:13
【问题描述】:

我正在尝试匹配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 作为参数进行模式匹配?

【问题讨论】:

    标签: scala pattern-matching


    【解决方案1】:

    我想你可以试试这个:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2021-11-11
        • 1970-01-01
        • 2013-02-27
        • 2013-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多