回答
提取器和案例類僅用於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