您的位置:首页 > 移动开发

apply方法和spray的dsl理解

2015-10-29 09:49 411 查看
在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"})

  }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: