在repl中,这会引发异常,我不知道为什么。 我真的很想理解这一点。
scala> (1 until 10000).foreach("%s%s".format("asdf", "sdff"))
java.lang.StringIndexOutOfBoundsException: String index out of range: 8
at java.lang.String.charAt(String.java:686)
at scala.collection.immutable.StringLike$class.apply(StringLike.scala:54)
at scala.collection.immutable.WrappedString.apply(WrappedString.scala:32)
at scala.collection.immutable.WrappedString.apply(WrappedString.scala:32)
at scala.collection.immutable.Range.foreach(Range.scala:75)
答案 0 :(得分:11)
将下面的代码视为未包装的伪代码:
val str = "%s%s".format("asdf", "sdff")
// "asdfsdff" you see, only 8 characters
(1 until 10000).foreach(x => str.getCharAt(x))
答案 1 :(得分:7)
Strings
可以像索引中的函数一样使用给定索引处的char:
val s: Int => Char = "abcd"
val c: Char = s(1)
这是Scala中的一般机制,其中具有apply
方法的对象可以像处理函数一样对待。字符串的apply
方法在StringOps中定义。
字符串“asdfsdff”正在传递给foreach,并且该范围中的每个连续值都将传递给该函数。当索引达到8
时会抛出异常,因为它超出了范围。