Step into Scala - 26 - 隐式参数,隐式转换与 DSL
来源:互联网 发布:苹果笔记本推荐 知乎 编辑:程序博客网 时间:2024/06/07 05:13
目录
- 隐式参数隐式转换与 DSL
- 隐式参数
- 概述
- 使用
- 隐式转换
- 概述
- 使用
- DSL
- 概述
- 使用
- 隐式参数
- 隐式参数隐式转换与 DSL
摘要
隐式参数,隐式转换,DSL
隐式参数,隐式转换与 DSL
隐式参数
概述
隐式参数用于泛型中,在使用时可以不用每次都手动指定类型
使用
语法
implicit 参数
abstract class SemiGroup2[A] { def add(x: A, y: A): A}abstract class Monoid2[A] extends SemiGroup2[A] { def unit: A}def sum[A](xs: List[A])(implicit m: Monoid2[A]): A = if (xs.isEmpty) m.unitelse m.add(xs.head, sum(xs.tail))implicit val stringMonoid = new Monoid2[String] { def add(x: String, y: String): String = x.concat(y) def unit: String = ""}implicit val intMonoid = new Monoid2[Int] { def add(x: Int, y: Int): Int = x + y def unit: Int = 0}// 如果没有使用隐式参数sum(List("a", "bc", "def"))(stringMonoid)sum(List(1, 2, 3))(intMonoid)// 使用了隐式参数sum(List("a", "bc", "def"))
隐式转换
概述
定义一个转换函数,可以在使用相应类型的时候自动转换。
使用
语法
implicit 方法定义
import java.text.SimpleDateFormatimplicit def strToDate(str: String) = new SimpleDateFormat("yyyy-MM-dd").parse(str)println("2013-01-01 unix time: " + "2013-01-01".getTime()/1000l) //2013-01-01 unix time: 1356969600
这个例子可以将 String
自动转换为 Date
类型。隐式转换是实现 DSL 的重要工具。
DSL
概述
DSL 是 Scala 最强大武器,可以使一些描述性代码变得极为简单。
使用
import java.util.Dateimport org.json4s.JsonDSL._import org.json4s.jackson.JsonMethods._case class Twitter(id: Long, text: String, publishedAt: Option[java.util.Date])var twitters = Twitter(1, "hello scala", Some(new Date())) :: Twitter(2, "I like scala tour", None) :: Nilvar json = ("twitters" -> twitters.map( t => ("id" -> t.id) ~ ("text" -> t.text) ~ ("published_at" -> t.publishedAt.toString())))println(pretty(render(json)))
这个例子是使用 DSL 生成 JSON。Scala 很多看似是语言级的特性也是用 DSL 做到的。
0 0
- Step into Scala - 26 - 隐式参数,隐式转换与 DSL
- scala 隐式转换参数
- scala学习之:隐式转换与隐式参数
- 【Scala类型系统】隐式转换与隐式参数
- Scala入门之隐式转换与隐式参数
- Scala学习—隐式转换与隐式参数
- Step into Scala - 01 - 安装与运行
- Step into Scala - 05 - 块与函数
- Step into Scala - 12 - 对象与枚举
- Scala--隐式参数
- 第63讲Scala中隐式参数与隐式转换的联合使用解析
- scala学习笔记(十六) 类型参数与隐式转换
- Step into Scala - 03 - 变量,常量与表达式
- Step into Scala - 16 - 样本类与模式匹配
- Step into Scala - 21 - I/O 操作与 Shell 操作
- Step into Scala - 23 - 与 Java 互相调用
- Step into Scala - 27 - Future, Promise 与 SyncVar
- scala-隐式转换
- Android-百度地图的调用 (基础版本)
- BeanFactoryPostProcessor和BeanPostProcessor的区别
- 【C语言】字符串操作函数my_strcmp
- jS 回车事件
- cocos2dx 音频模块分析(3): 背景音乐部分
- Step into Scala - 26 - 隐式参数,隐式转换与 DSL
- 得到屏幕大小的两种方法
- 【C语言】字符串操作函数my_strcat
- DM3730:在24 bit的LCD上顯示 RGB656的android initlogo.rle Logo
- ERROR: x86 emulation currently requires hardware acceleration!
- 【原创】利用notpad + .Net Reflector 进行软件破解小试
- 分工
- 【C语言】字符串操作函数my_strcpy
- zhuan