我注意到org.scalacheck.Properties
文件中的以下代码:
/** Used for specifying properties. Usage:
* {{{
* property("myProp") = ...
* }}}
*/
class PropertySpecifier() {
def update(propName: String, p: Prop) = props += ((name+"."+propName, p))
}
lazy val property = new PropertySpecifier()
我不确定调用property("myProp") = ...
时发生了什么。类apply
中没有PropertySpecifier
方法。那么,这里叫什么?
答案 0 :(得分:1)
您可能会注意到该用法不仅显示应用程序,还显示其他内容,即=
符号。通过让您的类实现update
方法,您可以让编译器如何更新此类的 state 并允许property("myProp") =
语法。
您可以在Array
上找到相同的行为,apply
执行读访问和update
写访问。
以下是一个可以用来理解这一点的小例子:
final class Box[A](private[this] var item: A) {
def apply(): A =
item
def update(newItem: A): Unit =
item = newItem
}
val box = new Box(42)
println(box()) // prints 42
box() = 47 // updates box contents
println(box()) // prints 47