Scala def in a object - 命名约定大写驼峰案例?

时间:2014-01-31 16:23:32

标签: scala naming-conventions

根据这里的惯例:http://docs.scala-lang.org/style/naming-conventions.html

  

块引用   常量名称应该在上部驼峰的情况下。也就是说,如果成员是final,immutable并且它属于包对象或对象,则可以将其视为常量(类似于Java的静态最终成员)

这是否意味着def也属于该类别?特别是如果功能纯净。例如,Parse方法:

object Parser{def Parse(string: String): AnyRef = ??? } 

3 个答案:

答案 0 :(得分:4)

不,它不应该。

这种解释主要是对稳定价值概念的简化。一个稳定的值是你可以信任的总是具有相同值的东西,它是Scala引入依赖类型的方式(也就是说,在Scala中,作为路径依赖类型)。

对于什么是稳定值有许多规则,这就是为什么在样式指南中使用更简单的解释。一条具体规则是必须 val - vardef不可接受。 var是不可接受的,因为值可以随时更改,并且def是不可接受的,因为每次调用它时它可能会返回不同的值(即使它没有收到参数)。

与此相关的是,您可以使用def覆盖val,但反之亦然。

所以只有val才有资格成为常量。

同样有趣的是,当您没有声明类型时,Scala会优化最终的val声明,如下所示:

object Constants {
  final val Zero = 0
}

这将导致Scala将Zero的实例替换为0。实际上,如果您重新编译ConstantZero的值从0更改为其他内容,则之前编译过的任何引用Constants.Zero的代码仍将使用{{ 1}}。

另一方面,如果你宣称它为0,那就不会发生。

答案 1 :(得分:0)

没有。方法名称应以小写字母开头。

答案 2 :(得分:0)

没有。

参考命名约定:

  

方法的文本(字母)名称应该在camelCase中   第一个字母小写的样式:

def myFairMethod = ...

大写字母名称用于常量。

  

方法,值和变量名称应该在较低的驼峰情况下:

val myValue = ...
def myMethod = ...
var myVariable

所以在你的情况下它将是:

object Parser {
 def parse(string: String): AnyRef = ???  
}