[英]drop,dropRight,take,takeRight vs substring?
我正在學習Scala
的Scala for Impatient和第01章練習有問題
- take,drop,takeRight和dropRight字符串函數有什么作用? 他們使用子串有什么優勢或劣勢?
我看到drop
(和flavors)的唯一優勢是不會拋出IndexOutOfBoundsException
例如:
scala> "Hello World!" dropRight 100
res26: String = ""
scala> "Hello World!" substring 100
java.lang.StringIndexOutOfBoundsException: String index out of range: -88
at java.lang.String.substring(String.java:1919)
... 33 elided
還有什么? 內存效率高?
主要的好處是它允許您將String視為一個連續的字符集合,就像任何其他Seq或List實例一樣。
實際上,這些方法(以及其他重要的轉換函數,如map,flatMap和filter)都沒有在String本身實現(實際上,它只是Java String類,而不是native-Scala類),但是在StringOps類中(它擴展了StringLike - > ... - > SeqLike),並且隱式轉換可確保在需要訪問這些方法時將String轉換為StringOps。
這意味着你可以將一個String傳遞給一個列表操作函數,該函數將接收一個StringOps實例,像任何其他SeqLike實體一樣處理它,而不需要知道它實際上是一個String,並且交回操作的結果, StringOps旨在以String形式呈現給您。
如果您知道某個實體是給定代碼段中的String,請隨意使用特定於String的方法,但此隱式轉換的可用性意味着您還可以利用String的“字符序列”類似性質來實現在可能方便的情況下將其視為任何其他列表。
似乎你是對的。 所有這些操作都使用StringOps.slice
方法,該方法委托給String.substring
方法。
因此,除了包裝字符串和執行邊界驗證的開銷之外,它與substring
調用相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.