scala的动态类实现
来源:互联网 发布:软件需求调查问卷 编辑:程序博客网 时间:2024/04/29 18:35
scala 2.10开始支持动态类型,做个类方面使用,动态对象的成员也可以动态调用。
val person = DynamicImpl()
person.name = "zs"
person.name.value
val bird = DynamicImpl()
bird.sing = (x:Any)=>{ 0.until(4).foreach( _ => {
print("hello ")
Thread.sleep(1000)
print("hello ")
Thread.sleep(1000)
println("how are you?")
Thread.sleep(1000)
} ) }
person.bird = bird
person.bird.sing()
通过元组解决参数个数问题
person.do0 = (x:Unit)=>println("no parameter")
person.do3 = (x:(String,Int,Double))=>println(" 1st para is "+x._1+", 2nd para is "+x._2.toString+", 3rd para is "+x._3.toString)
person.do0(())
person.do3(("abc",1,2.0))
(7月23日修改,定义一个类更清晰)
import scala.language.dynamics class DynamicImpl[T](val value:T) extends Dynamic { protected var members : collection.mutable.Map[String,DynamicImpl[Any]] = null //相当于属性的get def selectDynamic(memb: String) = { if(members != null) { members.get(memb) match { case Some(x) => x case None => null } } else { null } } //类成员的set,属性、方法都用此函数赋值 def updateDynamic[U](memb: String)(arg: U) = { if(members == null) members = collection.mutable.Map[String,DynamicImpl[Any]]() arg match { case d : DynamicImpl[Any] => members(memb) = d case _ => members(memb) = new DynamicImpl(arg) } } //方法的invoke def applyDynamic[U](method: String)(arg: U) = { if(members != null) { val func = members(method).value.asInstanceOf[Function1[Any,Any]] func(arg) } } } object DynamicImpl { def apply() = { new DynamicImpl(().asInstanceOf[Any]) } }
0 0
- scala的动态类实现
- WordCount的Scala实现
- 【Scala】Scala的类层级
- scala实现配置文件的合并
- Scala 排序算法的实现
- 感知器的scala实现
- 感知器的scala实现
- Scala的LRU算法实现
- 矩阵的基本功能 SCALA实现
- Scala实现Kafka的producer
- scala编程系列(12)-实现分数相加的类(上)
- scala编程系列(13)-实现分数相加的类(中)
- scala编程系列(14)-实现分数相加的类(下)
- Scala 实现两个类型比较的实现
- scala的类
- Scala 类的继承
- scala类的定义
- scala的容器类
- hive原生和复合类型的数据加载和使用
- 关于安卓查看网络图片的一些问题
- 直接插入排序
- 杭电1233还是畅通工程
- Android RIL 架构学习总结
- scala的动态类实现
- 【Oracle学习笔记】
- UVa 1451 Average 解题报告(斜率优化)
- BF算法
- 折半插入排序
- HUDJ 1021 Fibonacci Again
- Android之开启内置闹钟与已安装的应用程序设置
- debian添加开机启动服务
- Although you have