2 days ago 可以是一行代码,如同java里(int i=0;)可以通过编译,太Cool了,如同一句日常用语,非常吸引人;这行代码是在《Programming Scala:multi...》7.5节"隐式类型转换"里看到的,书里ago好像用的是String类型的,缺乏美观,虽是本入门级的书,不过入门级却不一定是写的很薄,可以做一些全面的介绍而不求讲的很深入;
于是自己就改编了一下:
import java.text.SimpleDateFormat
import java.util.{Calendar,Date}
sealed abstract class Day
abstract class Forward extends Day
abstract class Backward extends Day
case object ago extends Backward
case object before extends Backward
case object after extends Forward
case object later extends Forward
class DSL(x:Int){
def days(day:Day)={
var can=Calendar.getInstance
def backward():Unit=can.set(Calendar.DAY_OF_MONTH, can.get(Calendar.DAY_OF_MONTH)-x)
def forward():Unit=can.set(Calendar.DAY_OF_MONTH, can.get(Calendar.DAY_OF_MONTH)+x)
day match{
case day:Backward => backward()
case day:Forward => forward()
case _ =>
}
DSL.formats(can.getTime)
}
}
object DSL{
implicit def intToDSL(x:Int)=DSL(x)
def apply(x:Int)=new DSL(x)
def formats(date:Date)=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date)
def now=formats(Calendar.getInstance.getTime)+" => now..."
def main(args:Array[String]):Unit={
println(now)
println(2 days ago)
println(3 days before)
println(3 days after)
println(4 days later)
}
}
环境2.8.1.final,另存为xxx.scala文件
编译>scala xxx.scala
运行>scala DSL
2010-12-12 17:57:04 => now...
2010-12-10 17:57:04
2010-12-09 17:57:04
2010-12-15 17:57:04
2010-12-16 17:57:04
用String做匹配当然可以,我感觉应该用Scala的本身特性来做介绍,这样更能吸引读者;
case class 用在模式匹配,可以用来构建(复杂)表达式;
case object 在actor模型里被当做消息用于模式匹配,当然还有别的功能;
这个例子涉及到的知识点有:包引用,密封类,case object,隐式转换,模式匹配,函数,apply方法;
开始我是用case class,有点冗余,这里只是当做消息处理,于是改成case object;
解释一下,运行2 days ago这行代码,2是整型对象,它没有days方法,就会在执行的上下文里找一个隐式函数,这个隐式函数可以把整型对象转换成带有days方法的目标对象,如果预导入的PreDef对象内也含有一个做到上述功能的隐式函数,那么编译器会认为这是冲突,无法编译:
Note that implicit conversions are not applicable because they are ambiguous
这里我认为,编译器应该优先去找用户自定义隐式函数,而不是报错,呵呵,那样的话编译器要做更多的工作了。
分享到:
相关推荐
《在Scala中进行编程:全面的分步指南》(Programming in Scala: A comprehensive step-by-step guide)是一本关于Scala编程语言的权威教材。这本书的独特之处在于它的共同作者是Scala语言的设计师Martin Odersky,...
Scala:Applied Machine Learning by Pascal Bugnion English | 23 Feb. 2017 | ISBN-13: 9781787126640 | 1843 Pages | EPUB/PDF (conv) | 33.15 MB Leverage the power of Scala and master the art of building, ...
总结来说,`glicko2-scala`项目为Scala开发者提供了一种实现Glicko2评级系统的解决方案,结合了Glicko2的精妙算法和Scala的编程优势,适用于各种竞技游戏环境。通过理解和应用该项目,开发者能够更好地理解和管理...
"Scala: Guide for Data Science Professionals (Learning Path)" ASIN: B06XCJVY21, eISBN: 1787282856 | 2017 | True PDF | 1100 pages | 15 MB Scala will be a valuable tool to have on hand during your data...
【课程大纲】第1讲-Spark的前世今生第2讲-课程介绍、特色与价值第3讲-Scala编程:基础语法第4讲-Scala编程:条件控制与循环第5讲-Scala编程:函数入门第6讲-Scala编程:函数入门之默认参数和带名参数第7讲-Scala编程...
2. **创建通知(Advice)**:定义在切点触发时执行的代码,这可以是前置通知(Before Advice)、后置通知(After Advice)、环绕通知(Around Advice)等。 ```scala @after("allMethods()") def logExecution...
2. **函数式编程**:Scala也鼓励使用纯函数和不可变数据结构,提供了高阶函数、闭包、柯里化以及模式匹配等功能。这些特性使得编写并发代码更加简单和安全,因为它们减少了副作用和状态变化。 3. **类型系统**:...
Programming.Scala_Tackle.Multi-Core.Complexity.on.the.Java.Virtual.Machine[2009][EN][PDF] Programming Scala: Tackle Multi-Core Complexity on the Java Virtual Machine by Venkat Subramaniam Scala is ...
Testcontainers-scala 用于Scala包装器,允许使用容器进行功能/集成/ 单元测试。 TestContainers是一个Java 8库,支持JUnit测试,它提供了常见的数据库,Selenium Web浏览器或其他可以在Docker容器中运行的轻量,一...
plotly-scala是一个Scala库,能够输出可以传递给的JSON。 它的类严格遵循plotly.js的API,因此可以通过跟随plotly.js的使用来使用plotly-scala。 这些类可以转换为JSON,可以直接提供给plotly.js。 可以在scala-js或...
标签:11、xml_2、scala、lang、modules、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准...
赠送jar包:scala-parser-combinators_2.11-1.0.4.jar; 赠送原API文档:scala-parser-combinators_2.11-1.0.4-javadoc.jar; 赠送源代码:scala-parser-combinators_2.11-1.0.4-sources.jar; 包含翻译后的API...
js-scala:JavaScript作为Scala中的嵌入式DSL js-scala是一个Scala库,提供可组合JavaScript代码生成器作为嵌入式DSL。 从类似于Scala的代码生成(优化)JavaScript代码: import scala . js . language . JS ...
赠送jar包:scala-xml_2.11-1.0.4.jar; 赠送原API文档:scala-xml_2.11-1.0.4-javadoc.jar; 赠送源代码:scala-xml_2.11-1.0.4-sources.jar; 赠送Maven依赖信息文件:scala-xml_2.11-1.0.4.pom; 包含翻译后的API...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程...