鉴于此模式匹配:
List(1,2,3) match {
case head :: tail => println(">>> head=" + head)
}
Run Code Online (Sandbox Code Playgroud)
我假设'::'是在scala.collection.immutable中找到的case类,但是如何允许'::'以该形式写入(中缀表示法)? - 有一个特定的规则允许吗?
谢谢
oxb*_*kes 25
你甚至可以写:
val head :: tail = List(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
基本上任何预期模式的东西(matchfor-understanding中的赋值,语句或行)都可以使用提取器,该提取器被定义为具有unapply方法的实体.
其中一个片段的语法糖是斯卡拉为您提供的是; 如果你有一个提取器X(a, b),这可以写成a X b.以下是case类(具有默认提取器)的示例:
scala> case class X(a: Int, b: String)
defined class X
scala> val a X b = X(1, "two")
a: Int = 1
b: String = two
Run Code Online (Sandbox Code Playgroud)
编写这样的实体中缀的能力也扩展到了类型:
scala> type MappedTo[A, B] = Map[A, B]
defined type alias MappedTo
scala> def foo(m: Int MappedTo String) = m foreach println
foo: (m: MappedTo[Int,String])Unit
Run Code Online (Sandbox Code Playgroud)
请注意,在这两种情况下,scala都不会将此类中缀运算符限制为符号标识符
| 归档时间: |
|
| 查看次数: |
5047 次 |
| 最近记录: |