0

我见过一些 API 有一个def foo,然后略有不同,但除了“有点像但略有不同”def foo1之外,我无法弄清楚这意味着什么。它让我想起了“Ex”(“Ex”在 Windows API 函数名称中代表什么?foo1foo

我猜这是对 Haskell/FP 或数学约定的引用,它只是 foo-prime 吗?

是否有任何暗示(foo1必须以foo某种特定方式相关)还是更多“我需要两个类似的功能并且重载是模棱两可的,搞砸了,让我们在最后加上一个 1 ”?我是否应该假设“这两个功能以某种方式相关”之外的任何内容?

4

3 回答 3

2

我能想到的例子是repand rep1in scala.util.parsing.combinator.Parsers,其中rep是任意数量的重复,并且rep1是 1 或更多。还有一个repNN次重复的方法,所以这里1后缀的意思就很明显了。

于 2012-06-25T15:58:59.637 回答
1

我认为上下文可能就是这里的一切。我能想到的唯一例子是scalazfoldl1中的方法。正如库作者无疑会指出的那样,从查看类型本身来看,该方法实际上是完全透明的:

trait MA[M[_], A] {
  def foobar(f: (A, A) => A)(implicit FoldableM: Foldable[M]): Option[A]
}

但是,在这种情况下,它显然是 的一种特殊形式foldl向左折叠但使用第一个元素作为种子而不是显式提供的值。因此foldl1在上下文中是明智和直观的。

你说你见过几次:你能指出其他的发生吗?

于 2012-06-25T15:55:34.153 回答
0

Scala 包含诸如 Function 和 Tuple 之类的类型,它们具有一系列类型,每个成员都根据它所接受的参数数量来命名。

Function1[T1] => R
Function2[T1, T2] => R

Tuple1[T1]
Tuple2[T1, T2]

在这两种情况下,类型的名称必须是不同的,并且使用参数的数量是描述类型的好方法(Function4 是接受 4 个参数的函数的类型,Tuple3 是包含 3 个项目的元组的类型)。

正如其他答案所说,了解一些上下文会有所帮助,但可能是您的示例受到标准库中这些选择的启发(正确或错误)。

于 2012-06-26T17:26:45.733 回答