为什么 Scala 中的 drop() 方法允许负值并且不抛出错误?

Why does drop() method in Scala allow negative value and does not throw error?

我正在尝试用 Scala 弄脏我在终端上玩 scala.collection.immutable.StringOps 的地方。在字符串方法 drop() 中,我尝试执行此代码

"Whosebug".drop(-12)

我收到的输出是

Whosebug

-12 是一个拼写错误,但这个结果是意外的,因为它应该从最后截断 12 个字符或者是错误或异常。因为当我们将一个整数传递给 drop() 时,它会从字符串中删除相当于参数数量的第一个字符。为什么这种行为在 Scala 中与这种方法保持一致?这在某些情况下是否有用?这种行为的原因是什么?

Scala 有许多其他语言不支持的不同行为,例如

true > falsetruetrue < falsefalse

文档说 "If n is negative, don't drop any elements"。我猜原因是在某些情况下它可以让你跳过一些数学运算。例如,假设您想从两个字符串的开头删除,使它们的长度相等。你可以这样做:

def makeSameLength(s1: String, s2: String): (String, String) = {
  (s1.drop(s1.size-s2.size), s2.drop(s2.size-s1.size))
}

像这样的情况,你必须从一个序列中删除一些可变数量的元素,通常如果数学计算结果为负数,这意味着你不想删除任何东西全部。因此,这使您不必添加一些条件逻辑,或包含 max(x, 0) 或类似的。

我同意这有点令人惊讶,但我明白为什么它可能有用。