当前位置:  开发笔记 > 编程语言 > 正文

Option literal与Option变量

如何解决《Optionliteral与Option变量》经验,为你挑选了1个好方法。

任何人都可以解释这个片段的行为:

def test = {
  val xt: Option[String] = Some("1")
  val xx: String = "2"
  xt match {
    case Some(xx) => println("match")
    case _ => println("no match")
  }
  xt match {
    case Some("2") => println("match")
    case _ => println("no match")
  }
}

结果是

match
noMatch

当我对字符串文字改变val时,为什么会有区别?



1> knutwalker..:

表达式与其值在范围内case Some(xx)不匹配xx,而是匹配任何内容并将结果绑定到一个名为xxshadow new the external定义的新变量.

如果要匹配现有变量,请使用反引号:

def test = {
  val xt: Option[String] = Some("1")
  val xx: String = "2"
  xt match {
    case Some(`xx`) => println("match")
    case _ => println("no match")
  }
  xt match {
    case Some("2") => println("match")
    case _ => println("no match")
  }
}

或者将变量重命名为以大写字母开头:

def test = {
  val xt: Option[String] = Some("1")
  val Xx: String = "2"
  xt match {
    case Some(Xx) => println("match")
    case _ => println("no match")
  }
  xt match {
    case Some("2") => println("match")
    case _ => println("no match")
  }
}

编辑:这称为Scala语言规范中第8.1.5节中定义的稳定标识符模式

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有