我在Scala中遇到过这个函数def nullable: Boolean = true.我理解这个函数做了什么,但我想知道这种函数是否有特定的名称,以及不使用的动机是什么var
首先,我在scala中会非常精确:使用单词Function来表示一个实例FunctionN并在谈论a时使用单词Methoddef(可能有零个或多个参数列表).其次,这绝对确实有一个身体(尽管没有括在括号内).它的主体是表达式true(即一个布尔文字).
我假设你真的要问:"为什么使用一个没有参数列表的方法而不是val?"
在决定是否表示类的某些属性时,可以在方法和值之间进行选择(建议:避免使用var).通常,如果属性没有副作用,我们可以使用没有参数列表的def(scala惯用法是带有单个空参数列表的def意味着副作用).
因此,我们可以选择以下任何一种,所有这些在使用现场在语义上是等效的(性能特征除外):
case class Foo(s: String) {
//Eager - we calculate and store the value regardless of whether
// it is ever used
val isEmpty = s.isEmpty
}
case class Foo(s: String) {
//Lazy - we calculate and store the value when it
// it is first used
lazy val isEmpty = s.isEmpty
}
case class Foo(s: String) {
//Non-strict - we calculate the value each time
// it is used
def isEmpty = s.isEmpty
}
Run Code Online (Sandbox Code Playgroud)
因此,我们可能会采取以下建议
vallazy valdef但是,还有一个额外的考虑因素; 使用val(或lazy val)可能有利于使用IDE 进行调试,通常可以在检查窗口中向您显示任何范围内val的值
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |