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"})
}
}
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"})
}
}
相关文章推荐
- 微信素材管理之获取永久素材和删除永久素材
- ios 学习笔记(二)
- 框架模式 MVC 在Android中的使用
- Android本地数据存储之SQLite
- Swift Cheat Sheet [2] - Control Flow
- NSThread - 4
- Swift Cheat Sheet [1] — Basic Types
- android的消息机制——Handler机制
- 微信新增图文素材接口调用实例
- Android Studio 快捷键整理分享
- nib must contain exactly one top level object which must be a UITableViewCell instance
- Android实战简易教程-第六十七枪(android动画实现窗口抖动效果)
- Andriod界面设计适配和Android Studio中的资源
- Android M新控件之FloatingActionButton,TextInputLayout,Snackbar,TabLayout的使用
- Android Volley完全解析(四),带你从源码的角度理解Volley
- iOS 正则表达式的使用
- Web App 和 Native App怎么选择
- 需求,刚做android,这个布局想请加各位大神如何写
- Android RecyclerView 的瀑布流式布局
- iOS 应用版本检测更新