根据此链接example
然后我创建这样的代码:
object objPersamaan{
def main(args : Array[String]){
val x = objPersamaan("Budi ")
println(x)
}
def apply(pX:String) = pX + "Belajar"
def unapply(pZ:Int) : Option[Int] = if(pZ%2==0) Some(pZ/2) else None
}
我还是不明白, objPersamaan(“Budi”)怎么会有价值 Budi Belajar ?那个方法应用就像带参数的构造函数一样?或者是什么?任何人都可以从方法申请解释更详细的原因吗?谢谢!
答案 0 :(得分:5)
在Scala中,您可以省略方法名称apply
。因此,调用objPersamaan("Budi ")
与objPersamaan.apply("Budi ")
相同,然后将字符串Belajar
连接到给定参数。
当你有一个对象并且没有方法名称而只是你的参数调用它时,copmiler会用MyObject.apply(...)
扩展这个调用。这是因为您经常使用想要应用某些内容的对象(例如在工厂中),因此Scala会将此功能直接构建到该语言中。
case class MyObj(foo: String, bar: String)
object MyObj {
def apply(x: Int): MyObj = MyObj(x.toBinaryString, x.toHexString)
}
// ...
MyObj(42)
// same as
MyObj.apply(42)