回答
提取器和案例类仅用于13 kinds of patterns in Scala中的两个,分别是“提取器模式”和“构造器模式”。您在不能使用使用Int
或String
这种模式(case String(x)
)。但是你可以在其他类型的使用:
类型化模式,如
case x: String
。在这种情况下,String
没有什么特别之处,你可以对任何类都做同样的事情(但是在Int
和其他原语中有一些特别的地方:case x: Int
实际上在大多数情况下检查接收到的对象是否是java.lang.Integer
)。字形,如
case 0
或case ""
。再一次,没有什么特别的字符串,这适用于所有文字。
val x: Any = 5
def f[T](v: T) = v match {
case _: Int => "Int"
case _: String => "String"
case _ => "Unknown"
}
我在问为什么它有效。字符串是java.lang.String的别名,它既不是一个案例类不是提取器,纠正我,如果我错了。 – rapt
您不必在类中定义unapply
到能够使用类switch/case
风格的模式匹配。 unapply
用于解构对象,因此,如果要匹配List
-style(case x:xs
)中的开关,则应该使用unapply/unapplySeq
。这里的好例子是正则表达式,它们是从字符串构造的 - "something".r
(最后注意.r
)。
java.lang.String
富含scala.collection.immutable.StringOps
(http://www.scala-lang.org/api/2.11.8/#scala.collection.immutable.StringOps),其混合scala.collection.immutable.StringLike
(http://www.scala-lang.org/api/2.11.8/#scala.collection.immutable.StringLike)。在那里,你可以找到互补的方法,如适用。
String
是有点特别的好,你可以将其转换的Char
的名单,并使用List
提取然后像case List(a,b)
或case x:xs
上String
,记住a
和b
将Char
S轴承; x: Char
和xs: List[Char]
所有原始类型都有Rich *类(例如scala.runtime.RichBoolean
,scala.runtime.RichByte
)。
值类机制用于丰富所有上述类型(http://docs.scala-lang.org/overviews/core/value-classes.html)。在编译时他们有一个包装类型,如RichBoolean
或RichInt
,但在运行时它们是纯布尔或Int类型。以这种方式避免了创建运行时对象的开销。
“字符串也有点特别,因为它只是一个Chars列表,这意味着您可以使用List提取程序(如大小写列表(a,b))或案例x:字符串上的xs”试试吧。 –
@AlexeyRomanov你是对的,你需要'toList'才能工作。我诚实地认为这将工作没有额外的努力%)。我将编辑这个answear。 – iuriisusuk
即便如此,将字符串转换为“List [Char]”也相当缓慢,结果列表比'String'需要更多的内存。 _Much_最好使用'toSeq'(或者隐式转换为'Seq [Char]'),它只会创建一个小包装器对象,并使用Seq特定的方法和匹配器。 –
- 1. 模式匹配的字符串在斯卡拉
- 2. 斯卡拉+模式匹配+字符串自动装箱
- 3. case类,模式匹配和斯卡拉
- 4. playframework:国际化+斯卡拉
- 5. 斯卡拉子类模式匹配
- 6. 模式匹配 - 火花斯卡拉RDD
- 7. 模式匹配或isInstanceOf斯卡拉
- 8. 模式匹配的斯卡拉`class`
- 9. 斯卡拉匹配字符串和数组
- 10. 斯卡拉:匹配特殊字符
- 11. 斯卡拉模式匹配引用混淆内匹配的值
- 12. Cormen字符串匹配拉宾,卡普
- 13. 使用斯卡拉匹配字符串内的hrefs
- 14. 斯卡拉字符串 - json
- 15. 斯卡拉:从字符串
- 16. 斯卡拉:字符串Chomp
- 17. 我想模式匹配的字符串数组与单个字符串在斯卡拉?
- 18. 斯卡拉习惯模式匹配与java.lang.String中和案例类
- 19. 字符串模式匹配
- 20. 字符串,模式匹配
- 21. 斯卡拉列表匹配
- 22. 斯卡拉匹配列表
- 23. 斯卡拉匹配错误
- 24. 斯卡拉“匹配”帮助
- 25. 模式匹配和字符串操作
- 26. 模式识别和字符串匹配
- 27. 斯卡拉:正则表达式模式匹配
- 28. 斯卡拉:正则表达式直接模式匹配块
- 29. 斯卡拉发挥国际化:如何在所有模板
- 30. NSPredicate与正则表达式匹配国际字母字符集
感谢您的链接。我不知道所有这些模式。 – rapt