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"})
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值