给定这里的约定:http://docs.scala-lang.org/style/naming-conventions.html
封锁常量名称应该在上骆驼的情况下。也就是说,如果成员是最终的、不可变的,并且它属于包对象或对象,则可以将其视为常量(类似于Java的静态最终成员)
这是否意味着def也应该属于这一类呢?尤其是在功能上纯净的情况下。例如,Parse方法:
object Parser{def Parse(string: String): AnyRef = ??? }
发布于 2014-01-31 16:50:34
不,不应该。
这一解释主要是对稳定价值概念的简化。稳定值是您可以信任的始终具有相同值的东西,也是Scala引入依赖类型(也就是Scala中的依赖类型,作为路径依赖类型)的方式。
对于什么是稳定的值,有许多规则,这就是为什么在样式指南中采用更简单的解释的原因。一个具体的规则是,它必须是一个val
-- var
和def
是不可接受的。var
是不可接受的,因为值可以在任何时候更改,而def
是不可接受的,因为它每次调用时都可能返回不同的值(即使它没有收到任何参数)。
与此相关的还有一个事实,即您可以使用一个def
覆盖一个val
,但反之亦然。
因此,只有val
才具有常量的资格。
同样令人感兴趣的是,Scala在不声明类型时优化了最终的val声明,如下所示:
object Constants {
final val Zero = 0
}
这将导致Scala将Zero
实例替换为0
。实际上,如果您重新编译Constant
,将Zero
的值从0
更改为其他东西,那么以前编译过的任何引用Constants.Zero
的代码都将仍然使用0
。
另一方面,如果您将其声明为final val Zero: Int = 0
,则不会发生这种情况。
发布于 2014-01-31 16:26:07
不是的。方法名称应以小写字母开头。
发布于 2014-01-31 16:26:47
不是的。
引用命名约定:
方法的文本(字母)名称应该是camelCase风格的,第一个字母小写:
def myFairMethod = ...
大写名称是常量的意思。
方法、值和变量名称应在下骆驼的情况下:
val myValue = ...
def myMethod = ...
var myVariable
在你的情况下会是:
object Parser {
def parse(string: String): AnyRef = ???
}
https://stackoverflow.com/questions/21484954
复制相似问题