在上一篇中,我们示范了使用macro来重写 Log 的 debug/info 方法,并大致的介绍了 macro 的基本语法.基本使用方法.以及macro背后的一些概念, 如AST等.那么,本篇中,我们将结合作者在 scala-sql 项目中的一些实际应用,向你展示 macro 可以用来做什么?怎么用? scala-sql 简介 scala-sql 是一个轻量级的 JDBC 库,提供了在scala中访问关系型数据库的一个简单的API,其定位是对面 scala开发者,提供一个可以替换 spring-…
在Java开发中,经常会有一个需求,将一个 Bean 复制到另外一个 Bean,尤其是在后台分层的场景下,在不同的层之间传递信息,经常需要进行 这样的一个对象复制工作,类似于: val source: PersonSource = ...val dest = new PersonDest() dest.setName( source.getName ) dest.setEmail( source.getEmail ) dest.setAddress( source.getAddress ) ..…
优化的日志方式 package macros_demo import scala.language.experimental.macrosimport org.slf4j._import scala.reflect.macros.whitebox.Context object Macros {    implicit class LoggerEx(val logger: Logger) {        def DEBUG(msg: String): Unit = macro LogMacros…
在Lisp语言中,macro是一个神器,可以“动态的生成代码”,然后被执行,这种方式给到Lisp无限的表达能力.除Lisp之外,很少有语言支持Macro这个特性,我记得 GWT之中曾经有一个类似的Generator的概念,可以在编译期间提供一定的代码生成能力(GWT Project),很多GWT的高级特性都是通过这个语言特性而得以实现的,譬如: UiBinder 可以实现申明式的 UI 开发. ImageBundle 简单的实现很多图片的聚合,从而减少round-trip,提高网页装载速度. S…
Scala语言笔记 - 第三篇(容器方法篇) 目录 Scala语言笔记 - 第三篇(容器方法篇) map和flapMap方法: ​ 最近研究了下scala语言,这个语言最强大的就是它强大的函数式编程(Function Programming)能力,记录下最近学习的一些新的和技巧.注意:本系列博客不会从头讲解该语言的语法,而是通过一些例子讲解该语言的一些技巧,如果需要从头学习scala,建议使用该教程快速入门. map和flapMap方法: ​ 对于数组或者容器,scala和Python等语言类似…
前情提要: scala函数式编程(二) scala基础语法介绍 scala函数式编程(二) scala基础语法介绍 前面已经稍微介绍了scala的常用语法以及面向对象的一些简要知识,这次是补充上一章的,主要会介绍集合和函数. 注意噢,函数和方法是不一样的,方法是在类里面定义的,函数是可以单独存在的(严格来说,在scala内部,每个函数都是一个类) 一.scala集合介绍 还记得上一章介绍的object的apply方法吗,很多数据结构其实都用到了它,从而让我们可以直接用List(...)这样来新建…
MapReduce编程模型 在Google的一篇重要的论文MapReduce: Simplified Data Processing on Large Clusters中提到,Google公司有大量的诸如Web请求日志.爬虫抓取的文档之类的数据需要处理,由于数据量巨大,只能将其分散在成百上千台机器上处理,如何处理并行计算.如何分发数据.如何处理错误,所有这些问题综合在一起,需要大量的代码处理,因此也使得原本简单的运算变得难以处理. 为了解决上述复杂的问题,Google设计一个新的抽象模型,使用这…
    奋斗不能等待,我们不能等到垂暮之年再去“全力以赴”.让我们从现在开始,为理想而努力,为人生而拼搏.精诚所至,金石为开,相信奋斗会让我们的青春之花绽放得更加绚烂,让我们的人生之路走下来不留遗憾. 一.我带大家看看我的神奇Bank系统思路. 1.我们都知道去银行办理业务都是要有一张属于你自己的卡    所以这里就需要一个卡的类 class Card { private string cardNo;//卡号 private string cardOwner;//持卡人 private stri…
本系列博客以<Programming in Scala 2nd Edition>为主,围绕其中的代码片段进行学习和分析. 本文主要梳理Chapter2和Chapter3中涉及到的主要概念. 一.变量定义时的val和var 在Scala中定义一个变量可以使用两种关键字var和val.其中val类似于Java中的final类型变量,值不可变.var定义的变量值是可变的. 1.val变量 当给一个val变量重新赋值时就会出现如下提示: 2.var变量 如果确实需要更改某个变量的值,可以使用var.下…
推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 滴滴Booster移动App质量优化框架-学习之旅 二对重复资源优化和无用资源优化进行了讨论.这里对不可编译无用assets资源优化进行讨论. 先看微信Matrix-ApkChecker是怎样检索对无用assets资源.ApkCheckers是针对 android 安装包的分析检测工具,反汇编apk包中dex文件,在内存生产smali相关数据,检索  const…