文档章节

scala dynamics 示例

cloud-coder
 cloud-coder
发布于 2016/02/03 10:53
字数 287
阅读 197
收藏 0

简介

    scala 新版本 2.10 引入了 Dynamic 这个 trait,意思上就是希望能够动态的 handle 一些东西

示例

package cn.cloud.scala
import scala.language.dynamics
import scala.collection.mutable.HashMap

class DynamicPerson extends Dynamic {
  //定义一个方法类型 CallFun,它接收 Int 类型参数,并返回 String 类型 ,这个有点像 C# 中的 delegate 
  type CallFun = Int => String
  
  //Map对象,存放属性
  private val fields = HashMap.empty[String, Any].withDefault {
    key => throw new NoSuchFieldError(key)
  }
  
  //Map对象,存放方法对象
  private val functions = HashMap.empty[String, CallFun].withDefault {
    key => throw new NoSuchFieldError(key)
  }
  //选取对象
  def selectDynamic(key: String) = fields(key)
  /**
   * 更新key对应的value
   * 这里做了一个判断,如果key以do字符串开头,我们认为是args是CallFun类型
   */
  def updateDynamic(key: String)(args: Any): Unit = {
    args match {
      case x if key.startsWith("do") => functions(key) = x.asInstanceOf[CallFun]
      case _ => fields(key) = args
    }
  }
  //这个就是用来动态执行方法的
  def applyDynamic(key: String)(arg: Int) = {
    println(functions(key)(arg))
  }
}

object SimpleDemo {
  def main(args: Array[String]): Unit = {
    val person = new DynamicPerson()
    //设置Name属性
    person.Name = "Mike"
    //定义一个 call 方法
    person.doPrintInfo = (age: Int) => s"${person.Name} 今年 $age 岁"
    //通过 applyDynamic 执行 call 方法 
    person.doPrintInfo(80) 
  }
}

© 著作权归作者所有

共有 人打赏支持
cloud-coder
粉丝 247
博文 189
码字总数 135000
作品 0
广州
架构师
Javascript 动画库--dynamics.js

dynamics.js 是一个 Javascript 库,可以创建基于物理的 CSS 动画。 使用示例: 包含 到你的页面: <script src="dynamics.js"></script> 你可以给任何 DOM 元素的 CSS 属性加入动画。 var ...

sikkx
2015/06/16
795
0
Kafka源码环境搭建

本文主要讲述的是如何搭建Kafka的源码环境,主要针对的Windows操作系统下IntelliJ IDEA编译器,其余操作系统或者IDE可以类推。 1.安装和配置JDK 确认JDK版本至少为1.7,最好是1.8及以上。使用...

u013256816
2017/11/14
0
0
Spark,一种快速数据分析替代方案

虽然 Hadoop 在分布式数据分析方面备受关注,但是仍有一些替代产品提供了优于典型 Hadoop 平台的令人关注的优势。Spark 是一种可扩展的数据分析平台,它整合了内存计算的基元,因此,相对于 ...

IBMdW
2012/01/05
2.9K
2
【转】Spark,一种快速数据分析替代方案

Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,...

mj4738
2012/05/24
0
0
秀才遇到猫/loaddll

作者@秀才遇到猫 特别说明 java综合测试请看项目loaddll-test 它是使用opencv-mser提取身份证号码图块,使用本项目加载对应动态库 然后使用javacpp提供好的org.bytedeco.javacpp-presets下的...

秀才遇到猫
2016/05/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

创建第一个react项目

sudo npm i -g create-react-app@1.5.2 create-react-app react-app cd react-apprm -rf package-lock.jsonrm -rf node_modules #主要是为了避免报错npm installnpm start......

lilugirl
今天
1
0
在浏览器中进行深度学习:TensorFlow.js (八)生成对抗网络 (GAN)

Generative Adversarial Network 是深度学习中非常有趣的一种方法。GAN最早源自Ian Goodfellow的这篇论文。LeCun对GAN给出了极高的评价: “There are many interesting recent development...

naughty
今天
0
0
搬瓦工镜像站bwh1.net被DNS污染,国内打不开搬瓦工官网

今天下午(2018年10月17日),继搬瓦工主域名bandwagonhost.com被污染后,这个国内的镜像地址bwh1.net也被墙了。那么目前应该怎么访问搬瓦工官网呢? 消息来源:搬瓦工优惠网->搬瓦工镜像站b...

flyzy2005
今天
3
0
SpringBoot自动配置

本篇介绍下,如何通过springboot的自动配置,将公司项目内的依赖jar,不需要扫描路径,依赖jar的情况下,就能将jar内配置了@configuration注解的类,创建到IOC里面 介绍下开发环境 JDK版本1.8 spr...

贺小五
今天
5
0
命令行新建Maven多项目

参考地址 # DgroupId 可以理解为包名# DartifactId 可以理解为项目名mvn archetype:generate -DgroupId=cn.modfun -DartifactId=scaffold -DarchetypeArtifactId=maven-archetype-quickst......

阿白
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部