Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala中辅助函数的命名方案_Scala_Haskell_Naming Conventions - Fatal编程技术网

Scala中辅助函数的命名方案

Scala中辅助函数的命名方案,scala,haskell,naming-conventions,Scala,Haskell,Naming Conventions,在Haskell中,当我需要快速工作函数或帮助值时,我通常使用素数(“),这在数学中被广泛使用。例如,如果我要编写一个reverse函数,并且需要一个尾部递归工作程序,我会将其命名为reverse' 在Scala中,函数名不能包含“。Scala中是否有任何公认的辅助函数和值命名方案?为什么不在使用它的方法中声明该方法?然后,您可以将其称为“助手”或任何您喜欢的名称,而不必担心名称冲突 scala> def reverse[A](l:List[A]) = { | def hel

在Haskell中,当我需要快速工作函数或帮助值时,我通常使用素数(
),这在数学中被广泛使用。例如,如果我要编写一个
reverse
函数,并且需要一个尾部递归工作程序,我会将其命名为
reverse'


在Scala中,函数名不能包含
。Scala中是否有任何公认的辅助函数和值命名方案?

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

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)

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

def reverse(...) = {
  def reverse0(...) = {
    // ...
  }
  reverse0(...)
}

除此之外,您仍然可以将其称为reverse,因为签名各不相同。当其意义为循环时,我更喜欢内部方法的名称
loop
。我也使用
loop
。如果内部方法有一种累加器值,则使用后缀
Acc
。非特定内部方法的典型Haskell名称是
go
@agilesteel:使用不同的签名反向调用它的问题是,如果给定名称有两个重载,则类型推断将停止从调用到其参数,这意味着您通常需要更多的类型注释。您也可以遵循;)