Scala中辅助函数的命名方案

mru*_*ueg 7 haskell scala naming-conventions

在Haskell中,当我需要快速工作函数或辅助值时,我通常使用'广泛用于数学的prime().例如,如果我要编写一个reverse函数并且需要一个尾递归工作器,我会命名它reverse'.

在Scala中,函数名称不能包含'.Scala中是否有任何常用的辅助函数和值的命名方案?

Kim*_*bel 13

为什么不在使用它的方法中声明方法?然后,您可以将其称为"帮助者"或任何您喜欢的,而不必担心名称冲突.

scala> def reverse[A](l:List[A]) = {
     |   def helper(acc:List[A],rest:List[A]):List[A] = rest match {
     |     case Nil => acc
     |     case x::xs => helper(x::acc, xs)
     |   }
     |   helper(Nil, l)
     | }
reverse: [A](l: List[A])List[A]

scala> reverse(1::2::3::Nil)
res0: List[Int] = List(3, 2, 1)
Run Code Online (Sandbox Code Playgroud)

  • 除此之外,您仍然可以将其称为反向,因为签名会有所不同. (2认同)
  • @agilesteel:使用不同的签名调用它的问题是,如果给定名称有两个重载,则类型推断不再从调用流向其参数,这意味着您通常需要更多类型注释. (2认同)

Jea*_*let 6

如果我记得2004年我参加的Martin Odersky的编程课程,我认为他使用了0后缀作为辅助函数 - 在主函数体内定义.

def reverse(...) = {
  def reverse0(...) = {
    // ...
  }
  reverse0(...)
}
Run Code Online (Sandbox Code Playgroud)