apply方法和spray的dsl理解

在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"})
  }
}

你可能感兴趣的:(综合)