在scala中scala分为两种类型,分别为:
1,class里面的apply方法
class里面的一个特色方法,可以显示的在对象上调用(val ao = ApplyTest() ; ao.apply("dddd"));
也可以隐式的调用如 ao("ddd"),相当于省略掉了方法名,这其实就和map的取值操作是一样的;
也可以另外一种隐式的调用 ao{"ddd"},大括号里面的类型即可以是普通变量长量也可以是函数,这在spray中的route中定义的dsl中大量应用
2,object里面的apply方法
就只是启动初始化对象的作用,在初始化的时候省略了new这个关键字
例子如下:
class ApplyTest {
def apply() = "apply() in class"
def apply(name : String) = "apply(name : String) in class: " + name
def test = {
println("test() in class")
}
def test1(name : String) = println("test1(name : String) in class")
}
object ApplyTest {
def apply() = {
println("apply() in object: ")
new ApplyTest
}
def apply(name : String) = "apply(name : String) in object: " + name
}
object ApplyTestClient {
def main (args: Array[String]) {
//当我们使用 "val a = ApplyTest()" 会导致 object的apply 方法被调用,一般情况下就就,ApplyTest 类的实例化对象
val a = ApplyTest()
a.test
println(a())
println(a.apply())
println(a("()dong"))
println(a{"{}dong"})
}
}
1,class里面的apply方法
class里面的一个特色方法,可以显示的在对象上调用(val ao = ApplyTest() ; ao.apply("dddd"));
也可以隐式的调用如 ao("ddd"),相当于省略掉了方法名,这其实就和map的取值操作是一样的;
也可以另外一种隐式的调用 ao{"ddd"},大括号里面的类型即可以是普通变量长量也可以是函数,这在spray中的route中定义的dsl中大量应用
2,object里面的apply方法
就只是启动初始化对象的作用,在初始化的时候省略了new这个关键字
例子如下:
class ApplyTest {
def apply() = "apply() in class"
def apply(name : String) = "apply(name : String) in class: " + name
def test = {
println("test() in class")
}
def test1(name : String) = println("test1(name : String) in class")
}
object ApplyTest {
def apply() = {
println("apply() in object: ")
new ApplyTest
}
def apply(name : String) = "apply(name : String) in object: " + name
}
object ApplyTestClient {
def main (args: Array[String]) {
//当我们使用 "val a = ApplyTest()" 会导致 object的apply 方法被调用,一般情况下就就,ApplyTest 类的实例化对象
val a = ApplyTest()
a.test
println(a())
println(a.apply())
println(a("()dong"))
println(a{"{}dong"})
}
}