我见过一些API def foo
然后略有不同def foo1
,但除了“foo1
之外,我无法弄清楚这是什么意思foo
但略有不同。“它让我想起“前”(What does "Ex" stand for in Windows API function names?)
我猜这是对Haskell / FP或数学约定的引用,它只是foo-prime?
是否有任何隐含意义(foo1
必须以某种特定方式与foo
相关)或更多“我需要两个类似的功能,而且重载是模棱两可的,搞砸了,让我们放一个1结尾“?除了“这两个函数在某种程度上是相关的”之外,我应该假设吗?
答案 0 :(得分:2)
我能想到的例子是rep
中的rep1
和scala.util.parsing.combinator.Parsers
,其中rep
是任意数量的重复,rep1
是1或更多。对于N次重复也有repN
方法,所以1
后缀的含义非常明显。
答案 1 :(得分:1)
我认为上下文可能就是这里的一切。我能想到的唯一例子是 scalaz 中的foldl1
方法。正如图书馆作者无疑会指出的那样,该方法实际上是通过查看类型本身而完全透明的:
trait MA[M[_], A] {
def foobar(f: (A, A) => A)(implicit FoldableM: Foldable[M]): Option[A]
}
然而,在这种情况下,它显然是foldl
的特殊形式,也就是说,向左折叠但是使用第一个元素作为种子而不是明确提供的值。因此foldl1
在上下文中是明智和直观的。
你说你已经看过几次:你能指出其他事件吗?
答案 2 :(得分:0)
Scala包含类似Function和Tuple的类型,它们有一系列类型,每个成员都以它所参数的数量命名。
Function1[T1] => R
Function2[T1, T2] => R
Tuple1[T1]
Tuple2[T1, T2]
在这两种情况下,类型的名称必须是不同的,并且使用参数的数量是描述类型的好方法(Function4是带有4个参数的函数的类型,Tuple3是包含3的元组的类型项目)。
正如其他答案所说,有一些背景会有所帮助,但可能是你的例子受到标准库中这些选择的启发(正确或错误)。