簡體   English   中英

drop,dropRight,take,takeRight vs substring?

[英]drop,dropRight,take,takeRight vs substring?

我正在學習ScalaScala for Impatient和第01章練習有問題

  1. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM