【问题标题】:Scala syntax strangeness with :: and requiring lower caseScala 语法奇怪,带 :: 并且需要小写
【发布时间】:2015-07-28 08:54:13
【问题描述】:

这应该发生吗?

scala> val myList = List(42)
myList: List[Int] = List(42)

scala> val s2 :: Nil = myList
s2: Int = 42

scala> val S2 :: Nil = myList
<console>:8: error: not found: value S2
       val S2 :: Nil = myList
           ^

它似乎区分大小写。错误或“功能”?

【问题讨论】:

    标签: scala syntax


    【解决方案1】:

    区分大小写。在匹配模式中,以大写字母开头(或由反引号引用)的标识符被视为对已定义值的引用,而不是新绑定。

    这让很多人大吃一惊,而且阅读 Scala 语言规范并不是很明显。最相关的位是“variable patterns” ...

    变量模式x 是一个以小写字母开头的简单标识符。它匹配任何值,并将变量名绑定到该值。

    ...和“stable identifier patterns”:

    要解决与变量模式的句法重叠,稳定的标识符模式可能不是以小写字母开头的简单名称。

    相关问题:

    【讨论】:

      【解决方案2】:

      特点:)

      :: 是模式匹配的一种形式。在 Scala 中,以小写字母开头的变量用于应该被匹配绑定的变量。以大写开头(或用反引号括起来)的变量用于现有的变量,这些变量用作匹配模式的一部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多