Scala中的“foo”与“foo1”命名约定是什么?

时间:2012-06-25 15:24:30

标签: scala

我见过一些API def foo然后略有不同def foo1,但除了“foo1之外,我无法弄清楚这是什么意思foo但略有不同。“它让我想起“前”(What does "Ex" stand for in Windows API function names?

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

是否有任何隐含意义(foo1必须以某种特定方式与foo相关)或更多“我需要两个类似的功能,而且重载是模棱两可的,搞砸了,让我们放一个1结尾“?除了“这两个函数在某种程度上是相关的”之外,我应该假设吗?

3 个答案:

答案 0 :(得分:2)

我能想到的例子是rep中的rep1scala.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的元组的类型项目)。

正如其他答案所说,有一些背景会有所帮助,但可能是你的例子受到标准库中这些选择的启发(正确或错误)。