在 Scala 中当方法不需要接受参数时可定义成两种类型的方法
1. def width(): Int 空括号方法(empty-paren method)
2. def width: Int 无参数方法(parameterless method)
从语法上讲,Scala 在调用上面那种类型的方法时都可以统一用 obj.width 的方式,实际对于无参数方法是只能用 obj.width 的方式,而空括号方法,既可以用 obj.width 也可以用 obj.width() 的形式。
那么 Scala 在方法无须参数时是定义空括号方法还是无参数方法时有什么约定呢?
当方法没有副作用(side effect)时,定义成无参数方法;当方法会产生副作用时,定义成空括号方法
那么又该如何识别方法是否有副作用呢?一般来说有副作用的地方会在于其结果类型是否为 Unit。如果某个函数不返回任何有用的值,也就是说如果返回类型为 Unit,那么这个函数唯一能产生的作用就只能是产生某种副作用,例如改变对象内部的某种状态,或是向控制台的输出等。有副作用的方法就像是数据库的存储过程(一般用于更新数据),无副作用的方法像是数据库的函数(一般用于查询得到数据)。 阅读全文 >>