1. 如何自动测试和发布Scala库
可以用 Travis CI 和 sbt-best-practice 自动测试和发布 Scala 库。
Travis CI 是个持续集成服务。一旦你的 Github 仓库启用了 Travis CI ,每当有人在仓库推送代码或者提交 Pull Request 时,就会触发 Travis CI 执行一段脚本。
对于 Scala 项目来说,一般用 sbt 管理构建过程,所以我们会希望 Travis CI 被触发以后,执行测试和发布的 sbt 任务。这样就可以完成题主要求的所有功能了。
第一步:启用 Travis CI
Travis CI 的构建过程配置在 .travis.yml 文件中。Scala 库的 .travis.yml 应该写成这样:
# 告诉 Travis CI 应该用已经安装了 Scala 的系统镜像来执行本文件中配置的脚本language: scala# 应执行 sbt test 任务来进行自动测试script:- sbt test# 如果存在 deploy.sbt 文件,就执行 sbt "release with-defaults" 任务来进行自动发布deploy:skip_cleanup: trueprovider: scriptscript: sbt "release with-defaults"on:condition: -e ./deploy.sbtall_branches: true
有了 .travis.yml,你还需要访问你在 Travis CI 的 Profile 页面,为 Github 仓库启用 Travis CI。
创建 deploy.sbt 读取 SECRET_GIST 环境变量
deploy.sbt 包含了发布 Scala 库时的设置。我们启用 Travis 和 SonatypeRelease ,然后读取 SECRET_GIST 环境变量并加载 Secret Gist 中的 secret.sbt 文件
enablePlugins(Travis)enablePlugins(SonatypeRelease)lazy val secret = project settings(publishArtifact := false) configure { secret =>sys.env.get("SECRET_GIST") match {case Some(gitUri) =>secret.addSbtFilesFromGit(gitUri, file("secret.sbt"))case None =>secret}}
日常使用注意事项关于 deploy.sbt.disabled
把 .travis.yml 、 project/plugins.sbt 、 LICENSE 、 build.sbt 、 deploy.sbt 几个文件推送到 Git 仓库后, CI 会触发自动测试和自动发布。每次发布成功后,sbt-best-practice 会自动把 deploy.sbt 改名为 deploy.sbt.disabled ,因此,如果将来再有提交,就只会触发自动测试,而不会触发自动发布。如果你想发布下一个新版本,手动把deploy.sbt.disabled 改名为 deploy.sbt 就能触发 CI 执行自动发布流程了。
关于版本号
一旦触发发布,CI 会自动修改 version.sbt 中记录的版本号。比如你的仓库中原本版本号是 1.0.0-SNAPSHOT ,触发自动发布时, CI 会首先把版本号改为 1.0.0 然后标上 GIT tag,然后再把版本号改为 1.0.1-SNAPSHOT 。如果你希望下次发布的版本号是 1.5.0 ,那么你需要在触发下一次自动发布以前,手动把 version.sbt 中记录的版本号改为 1.5.0-SNAPSHOT 。
相关链接
Scala – 一门多范式的编程语言,也是本文的涉及的全部技术的基础。
scala-project-template – Scala项目模板,类似本文描述的结构,但改用私有 Git 仓库来保存密码而非 Secret Gist,因此 deploy.sbt 内容稍有不同。
Q.scala – 完整设置了自动测试和发布的 Scala 库。
Sbt – Simple Build Tool, Scala 社区最为广泛实用的构建工具。
sbt-best-practice – Sbt 插件,提供了本文提及的全部发布功能。
µTest – 一个简单好用的 Scala 测试框架。
Travis CI – 为 Github 项目提供了持续集成服务。除了 Travis CI ,其他持续集成方案还有我司的 GoCD 、 Jenkins 、 Bamboo 等。相比这些方案,Travis CI 很精简,完全省略了 pipeline 的概念,我很喜欢。开源项目可以免费使用 Travis CI。我见过的开源项目中最常见的持续集成服务就是 Travis CI。
2. 如何在mac intellij上写scala程序
久闻Scala大名,一直没有契机去学习,趁现在有个机会,去体验一下scala的美妙,在选择IDE的时候,看到有人推荐IntelliJ,以前开发Android的时候,使用过基于IntelliJ的android Studio,感觉良好,所以在Scala学习中,也选择IntelliJ作为开发工具。配置java和Scala环境Java 配置Mac自带Java,在Terminal中 输入java -version输出Java version “1.7.0_79”Java(TM) SE Runtime Environment (build 1.7.0_79-b15)java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)出现类似信息,说明你的Java环境已配置好。Scala 配置手动配置官网下载地址,选择好版本然后在网页下方选择要下载的安装包,下载完成后,移动到你的安装目录,然后解压我是放到了/usr/local/share/下mv scala-xxx.tgz /usr/local/share/然后配置环境变量,在Terminal中 vim ~/.bash_profile,在里面加入SCALA_HOME=/usr/local/share/scalaexport PATH=$PATH:$SCALA_HOME/bin保存退出,然后在Terminal中source ~/.bash_profile使配置文件生效。在Terminal中,输入scala version查看信息,即表示安装成功自动安装在Terminal中,使用brew install scala这样安装的是最新版本(如果你没有安装 homebrew,请安装好以后,再重试)如果需要安装以前老版本,比如 Scala 2.10.4 (old version)brew install homebrew/versions/scala210安装成功后,在Terminal中,输入scala version查看信息,即表示安装成功。IntelliJ的下载和配置下载官网下载地址如果简单学习,使用社区版即可,如果专业开发,请购买专业版。如果资金充裕,建议购买专业版,不想花钱的话,网上也有很多破解方法,自行查找。配置下载完成后,打开IntelliJ,在菜单栏的Preference中,选择Plugins(插件),然后搜索Scala安装即可,如果安装速度较慢,也可选择下方的Install plugin from disk自己手动下载好插件进行安装Hello World安装好插件,重启IntelliJ,我们就可以开始第一写自己的第一行Scala代码了选择 Create New Project点击下一步,为你的项目起一个名字点击Finish 即可问题注意上图中红框部分,看看SDK是否为空,如果为空,选择Create通过 Download 新下载一个SDK,或者Browse 找到自己在第一步中自己安装Scala的路径,配置好即可。下面就可以开始你的第一行Hello world了。
3. 在linux上如何配置spark环境,在linux上安装scala和spark老是失败
方法/步骤首先你的机器安装了jdk,我的新机器,所以早上刚在centos上折腾了jdk,没有的也可以去参考下下载安装包 scala-2.11.4.tgz spark-1.2.0-bin-hadoop2.4.tgz后面的包忘了之前哪找的了,需要的可以私我。将包传到服务器,解压tar zxvf scala-2.11.4.tgztar zxvf spark-1.2.0-bin-hadoop2.4.tgz配置环境变量vim /etc/profile加上以下对应内容:export JAVA_HOME=/home/yy/jdk1.8export SCALA_HOME=/home/yy/scalaexport SPARK_HOME=/home/yy/spark-1.2.0-bin-hadoop2.4export PATH=$PATH:$JAVA_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin执行source /etc/profile使配置生效修改spark配置进入spark-1.2.0-bin-hadoop2.4/conf复制模板文件:cp spark-env.sh.template spark-env.shcp slaves.template slaves编辑spark-env.sh添加上你的对应信息:export JAVA_HOME=/home/yy/jdk1.8export SCALA_HOME=/home/yy/scalaexport SPARK_MASTER_IP=172.20.0.204export SPARK_WORKER_MEMORY=2gexport HADOOP_CONF_DIR=/home/yy/spark-1.2.0-bin-hadoop2.4/conf编辑slaves添加上你的对应信息,所有的集群的机器:172.20.0.204172.20.0.205到此为止,前面所有的安装配置动作,在你的另一个机器上(所有的slave机器)同样的做一遍,即我这里的205机器进入spark-1.2.0-bin-hadoop2.4/sbin/目录执行:./start-all.sh如果没有设置ssh免密码登陆,会要求输入密码这时候jps查看多了个master和worker浏览器查看集群信息master地址+8080端口启动Running Applications在bin目录下执行: MASTER=spark://172.20.0.204:7077 ./spark-shell这时候就可以看到运行的app啦同时可以查看jobs内容slave机器上也运行app,这时候就可以看到运行的applications有两个啦。好了,环境就算先搭起来啦,后面就是去调用吧。http://jingyan..com/article/7e440953308f122fc0e2ef81.html
4. 如何配置 scala + maven + eclipse
1.安装Maven第一步,在Apache官网下载maven:http://maven.apache.org/download.cgi第二步,解压maven压缩包,配置环境变量:MAVEN_HOME=D:\maven-3.2.5 PATH=%MAVEN_HOME%\bin 第三步,在cmd中输入:mvn -version第四步,修改maven仓库存储位置在maven的安装目录下的conf目录中找到settings.xml配置文件,做如下配置:第五步,在cmd中执行:mvn help:system这时候maven会从远程仓库下载一大堆东西。2.Eclipse的插件安装2.1第一种安装方式在Eclipse中Help——>Install New Software,然后输入HTTP地址即可。这里不采用该方法。2.2第二种安装方式第一步,在Eclipse安装的根目录下创建两个文件夹:links和myplugins(名字可以随便取)第二步,下载eclipse-maven3-plugin.7z(其目录结构是:eclipse-maven3-plugin\maven\eclipse下有features和plugins两个目录),并解压到myplugins目录下。第三步,在links目录下创建一个maven.link(名字可以随便去,后缀名比为.link),并且在该文件中写入path=D:/eclipse/myplugins/maven第四步,重启Eclipse即可。3.Eclipse中集成Maven第一步,配置Maven。在Window——>Preferences中看到Maven项,然后进行如下5步操作:然后会在Installations中多一个maven3.2.5的选项,同时勾中该选项;第二步,设置maven的settings.xml配置文件路径信息4.Eclipse+Maven+Scala4.1安装Maven-Scala插件有两种方法:一是从http://alchim31.free.fr/m2e-scala/update-site/下载,二是通过Eclipse配置安装。下面只介绍第二种方法。第一步:添加远程的原型或模板目录:http://repo1.maven.org/maven2/archetype-catalog.xml第二步:新建Archetype,因为maven默认没有Group Id: net.alchim31.maven Artifact Id: scala-archetype-simple Version:1.64.2Maven-Scala项目创建maven项目,选择scala插件。
5. idea 上开发spark需要什么配置文件
(1)准备工作 1) 安装JDK 6或者JDK 7 2) 安装scala 2.10.x (注意版本) 2)下载Intellij IDEA最新版(本文以IntelliJ IDEA Community Edition 13.1.1为例说明,不同版本,界面布局可能不同) 3)将下载的Intellij IDEA解压后,安装scala插件
6. Scala的implicit如何使用需要注意什么
习函数式编程阅读DDD巨著《Patterns, Principles, and Practices of Domain-Driven Design》程Scott第5章提使用函数式编程语言配合贫血模型实践DDD种思路激发我限遐想软件发领域我已经拥许抽象论量实现技术我认切归根结底都类思维软件发领域具体表达式类认识析软件所要解决业务领域问题思考内容外乎由两部组:『业务流程』与『业务规则』前者答业务先做做问题;者则答遇情况应该做问题两者结合我需要业务结或者叫作实现业务目标再想想目前习掌握面向象系列何述思维结映射软件呢我认:于业务流程我其表达若干象间合作比UML序列图象与消息进具化具体类及其职责比类及其若干业务于业务规则我其表达若干判断逻辑比UML流程图判断支进具化业务if-else语句或者再复杂点表达工厂、策略等设计模式实际运用我认于复杂业务规则梳理象数归纳进行演绎:假设函数y=f(x)给定x定义域确定y值域特别排列组合等面些问题经采用递归式解决所角度讲函数式编程更贴近类思维习惯所让我自目光转向选择Scala选择具体函数式编程语言我首先想同能支持面向象编程即便LISP作函数式编程语言先祖诞已达半世纪单纯函数式编程语言与面向象编程语言相比抽象领域概念、组合系统模块、实现信息隐蔽等面存定差距所直没软件发主流信息隐蔽原理:西安电科蔡希尧与陈平师于1993合作版《面向象技术》书描述:需求求解离;相关信息——数据结构算集模块其模块隔离能随便访问模块内部信息其由于我语言路线Pascal → C → C++ → C#所我希望能选择种风格近似于C、强类型函数式编程语言比较F#、R、ErLang等几种见函数式编程语言我终选择ScalaScala何优势注:内容节选翻译或参考自《Programming in Scala》第1章、第3章《Programming Scala》第6章算完整意义函数式编程优势纯函数没副作用论何何于函数y=f(x)给定x必定y产二义结论于代码测试并发由于给定输入必定预期输受其素干扰所能效减少Bug产函数式编程量使用immutable值意味着函数运算结总创建新实例避免通并发环境防止数据共享冲突采取保护机制尽管需要额外Copy操作Scala针性提供高效Copy实现及延迟计算等弥补机制函数等公民函数作表达式部借由函数间嵌套、组合实现复杂判断逻辑Scala语言本身优势Scala面向象与函数式编程混合语言所能效结合二者优点Scala属于Java态圈JVM平台与Java起编译运行所许Java框架、工具都直接应用于Scala语言编写项目Scala视切数据类型皆象且支持闭包、lambda、by-name参数等特性语简洁明快Scala使用Actor作并发模型与Akka框架自契合种区别于传统、基于数据共享、锁主要机制并发模型其特点于Actor基本单位、没数据共享、基于消息传递实现Actor间协作效避免死锁、减少竞争朝要转向数据领域Spark型框架作支撑知乎:与 Hadoop 比何看待 Spark 技术Scala实践DDD何意义说我根本目要Scala作实现DDD主要武器试想Scala我实现DDD程能哪些帮助呢我暂且胡侃乱诌:表示值象、领域事件等元素更直观值象、领域事件DDD都应该immutable往采取POCO形式表示现改用Scalaval及case class表示语层面直观表明修改类层面实现CQRS语支持用ScalaFunction(返类型非Unit)应CQRSQuery保证类没副作用;用Procere(返类型Unit)应CQRSCommand明确表明类产修改状态等副作用同语层面能二者进行明确区模式匹配丰富函数操作除则表达式Scala形式模式匹配语提取数据、完数据组聚合等运算、实现逻辑判断提供强支持比定义def sum_count(ints:Seq[Int) = (ints.sum, ints.size)函数我调用1至6整数序列整数值合计及该序列尺寸:val(sum, count) = sum_count(List(1, 2, 3, 4, 5, 6))实现DSL提供力支持Scala自带解析框架加灵函数语支持要自实现套DSL及其相应语解析器再困难比配置文件条配置语句表示退休条件龄达60周岁或者工龄届满30:retire = (Age >= 60) || (ServiceLength >= 30)往式自写语解析器条文本转换相应Specification象扔给聚合使用现Scala帮助使编写语解析器环节工作量减少合理高阶函数设计使规则编写简化比打折规则、费用报销规则往能需要若干层if-else嵌套现则通高阶函数幅简化我强烈推荐刘光聪先视频Refactoring to Functions刘先重构程发现高阶函数强Actor高效并发打基础Actor内部完全自治自带用于存储消息mailbox与其Actor能通消息进行交互每Actor都并发基本单位些特点非适合于采取Event Sourcing式实现DDD每聚合都比Actor聚合内部始终保持数据强致性聚合间交互领域事件则比Actor间消息聚合间借由领域事件Saga保证数据终致性TraitAOP利器TraitScala另特色象AOP织入能态给某类型注入或者结构比配合类Circuitwith面4Trait定义val circuit = new Circuit with Adders with Multiplexers with Flipflops with MultiCoreProcessors创建带加器、乘器、触发器核处理器元件隐式实现类型扩展提供支持应C#静态扩展Scala通implicit实现数据类型扩展提供便捷Trait外另功能扩展手段能降低见BDD框架习本尽管点能比较牵强我努力摸索何BDD与DDD结合见Cucumber、Spock等些BDD框架其语与Scala比较相近所我才说哪些Scala习资料我目前主要习资料并衷欢迎各位留言补充书籍Programming in Scala:由Scala语言设计师Martin Odersky编写循序渐进配合量实例入门必读吧Programming Scala:视角与面本点没Scala语言基础觉困难适合掌握基本语温故知新线文档与视频Scala 官文档:Scala官网作寻找资料发点错Scala 课堂:文版Scala基本语线课堂Scala Synatax Primer:由Jim McBeath整理Scala语概要字典用The Neophyte’s Guide to Scala:名Scala入门指南Scala提取器Extractor作实例始Scala 初指南:面本指南译本Effective Scala:文版Scala高效编程SBT文入门指南:Scala Build Tool社区Scala 文社区:算跃原懂Scala User:Scala入门者聚集没Stack Overflow严格需要点爬墙身手SDK及IDEJava SE:先装Scala SDK:再装SBT:装IntelliJ IDEA:装能比较便始Scala编程写近读书杂DDD、BDD、Scala、Cucumber及Java基础等等都涉及真恨口吃胖由于间精力限所现知识消化问题迟迟没进入致用环节能先纸谈兵歹先自习程些思考、看东西先记载备需
7. 如何将配置文件传递给scala jar文件
Typesafe的Config库,纯Java写成、零外部依赖、代码精简、功能灵活、API友好。支持Java properties、JSON、JSON超集格式HOCON以及环境内变量。它也容是Akka的配置管理库.
8. 如何用notepad++支持Scala语法
notepad++应该是目前比较流行的文本编辑器之一,但是最近在开发scala时发现notepad++没有直接支持scala的语法,而且也没有scala的插架可以。后来在网上找到了支持scala语法的办法,和大家分享一下。1,在本地的“SCALA_HOME/misc/scala-tool-support/notepad-plus”路径下会有一个userDefineLang.xml配置 文件。2,将userDefineLang.xml配置文件复制到“%APPDATA%\Notepad++”路径下(%APPDATA%是系统的环境变量,可以 在cmd窗口下用set命令找到)3,重启notepad++。之后就会发现notepad++会将scala程序里的关键字,字符串,注释等用不同的颜色表示出来,在一定程度上有助于对scala代码的理解。
9. 学习scala有哪些好的资源
为什么学习函数式编程在阅读DDD巨著《Patterns, Principles, and Practices of Domain-Driven Design》的过程中,Scott在第5章提到了使用函数式编程语言配合贫血模型去实践DDD的一种思路,这激发了我的无限遐想。在开发领域,我们已经拥有了许多的抽象方法论和大量的实现技术。但我个人认为,这一切归根结底,都是人类思维在开发领域的具体表达方式。而人类在认识和分析所要解决的业务领域问题时,思考的内容不外乎由两个部分组成:『业务流程』与『业务规则』。前者,回答了业务活动中先做什么后做什么的问题;后者,则回答了遇到什么情况时应该怎么做的问题。两者结合后,得到我们需要的业务结果,或者叫作“实现业务目标”。再想想目前学习和掌握的面向对象的一系列方法,又是如何将上述思维结果映射到中去的呢?我认为是这样的:对于业务流程,我们将其表达为若干对象之间的合作,比如UML里序列图的对象与消息,进而具化为具体的类及其职责,比如类及其若干业务方法。对于业务规则,我们将其表达为若干的判断逻辑,比如UML流程图里的判断分支,进而具化为业务方法里的if-else语句,或者再复杂一点,表达为工厂、策略等设计模式的实际运用。然后,我认为,对于复杂业务规则的梳理,可以象数学归纳法一样进行演绎:假设一个函数y=f(x),给定x的定义域,确定y的值域。特别是在排列组合等方面的一些问题,也经常采用递归的方式来解决。所以,从这个角度讲,函数式编程更贴近人类思维习惯,所以让我自然而然地把目光转向了它。为什么选择Scala在选择具体的函数式编程语言时,我首先想到的是它最好是同时能支持面向对象编程的。因为即便LISP作为函数式编程语言的先祖,诞生已长达半个世纪,但单纯的函数式编程语言与面向对象编程语言相比,在抽象领域概念、组合系统模块、实现信息隐蔽等方面存在一定的差距,所以一直没有成为开发的主流。信息隐蔽原理:在西安电子科大蔡希尧与陈平老师于1993年合作出版的《面向对象技术》一书中是这样描述的:把需求和求解的方法分离;把相关信息——数据结构和算法,集中在一个模块之中,和其他模块隔离,它们不能随便访问这个模块内部的信息。其次,由于我的语言路线是从Pascal → C → C++ → C#,所以我希望能选择一种风格近似于C、强类型的函数式编程语言。在比较了F#、R、ErLang等几种常见的函数式编程语言之后,我最终选择了Scala。Scala有何优势注:以下内容,节选翻译或参考自《Programming in Scala》第1章、第3章,《Programming Scala》第6章,不算完整意义上的个人心得。函数式编程的优势纯的函数是没有副作用的。无论何时何地,对于一个函数y=f(x),给定x必定得到y,不会因此产生二义结果。因此无论对于代码测试还是并发,由于给定输入必定得到预期输出,而不受其他因素干扰,所以能有效减少Bug产生。在函数式编程里,大量使用immutable的值。这意味着函数运算的结果总会创建一个新的实例,避免了通常并发环境下为防止数据共享冲突而采取的保护机制。尽管这需要额外的Copy操作,但Scala针对性地提供了高效的Copy实现,以及延迟计算等弥补机制。函数是一等公民。函数作为表达式的一部分,可以借由函数之间的嵌套、组合,实现复杂的判断逻辑。Scala语言本身的优势Scala是面向对象与函数式编程的混合语言,所以能有效结合二者的优点。Scala属于Java生态圈,可以在JVM上与Java一起编译运行,所以许多Java的框架、工具都可以直接应用于Scala语言编写的项目。Scala视一切数据类型皆为对象,且支持闭包、lambda、by-name参数等特性,语法简洁明快。Scala使用Actor作为并发模型,与Akka框架自然契合。这是一种区别于传统的、基于数据共享、以锁为主要机制的并发模型,其特点在于以Actor为基本单位、没有数据共享、基于消息传递实现Actor之间的协作,因此可以有效避免死锁、减少竞争。最后,如果有朝一日要转向大数据领域,有Spark这样的大型框架作为支撑。知乎:与 Hadoop 对比,如何看待 Spark 技术?Scala对实践DDD有何意义说了那么多,我的根本目的还是要将Scala作为实现DDD的主要武器。那么试想一下,Scala在我们实现DDD的过程中能有哪些帮助呢?我暂且胡侃乱诌如下:表示值对象、领域事件等元素更直观。值对象、领域事件在DDD里都应该是immutable的,以往多采取POCO形式表示,现在改用Scala里的val以及case class表示,在语法层面就直观地表明是不可修改的。在类的方法层面实现CQRS时有语法支持。用Scala里的Function(返回类型为非Unit)对应CQRS里uery,保证类的方法没有副作用;用Procere(返回类型为Unit)对应CQRS里的Command,明确表明这一类方法会产生修改状态等副作用。这同样从语法层面就能对二者进行明确区分。模式匹配丰富了函数操作。除了正则表达式,Scala形式多样的模式匹配语法,为提取数据、完成数据分组聚合等运算、实现逻辑判断提供了强大支持。比如定义def sum_count(ints:Seq[Int) = (ints.sum, ints.size)这样一个函数后,我们可以这样调用,以得到一个1至6的整数序列的整数值合计,及该序列的尺寸:val(sum, count) = sum_count(List(1, 2, 3, 4, 5, 6))。为实现DSL提供有力支持。Scala自带有解析框架,加上灵活的函数语法支持,要自己实现一套DSL及其相应的语法解析器将不再困难。比如在配置文件里这样的一条配置语句,表示退休条件为年龄达到60周岁或者工龄届满30年:retire = (Age >= 60) || (ServiceLength >= 30)。以往的方式是自己写一个语法解析器,把这条文本转换成相应的Specification对象,然后扔给聚合去使用。现在有了Scala的帮助,就使编写语法解析器这一环节的工作量大大减少。合理的高阶函数设计,使规则编写得到简化。比如规则、费用报销规则,以往可能需要若干层的if-else嵌套,现在则将通过高阶函数得到大幅简化。对此,我强烈刘光聪先生的Refactoring to Functions,你会在刘先生的重构过程中发现高阶函数的强大。Actor为高效并发打下基础。Actor内部完全自治,自带用于存储消息的mailbox,与其他Actor只能通过消息进行交互,每个Actor都是并发的一个基本单位。这些特点,非常适合于采取Event Sourcing方式实现的DDD。每个聚合都好比一个Actor,在聚合内部始终保持数据的强一致性,而在聚合之间交互的领域事件则好比Actor之间的消息,聚合之间借由领域事件和Saga保证数据的最终一致性。Trait成为AOP利器。Trait是Scala的另一大特色,它就象AOP织入一样,能动态地给某个类型注入方法或者结构。比如配合类Circuit和with后面那4个Trait的定义,val circuit = new Circuit with Adders with Multiplexers with Flipflops with MultiCoreProcessors这样就创建了一个带有加法器、乘法器、触发器和多核处理器的元件。隐式实现为类型扩展提供支持。对应C#里的静态扩展方法,Scala通过implicit为实现数据类型的方法扩展提供了便捷,成为Trait之外的另一个功能扩展手段。能降低常见BDD框架的学习成本。尽管这一点可能比较牵强,但我正在努力摸索如何将BDD与DDD结合,而常见的Cucumber、Spock等一些BDD框架,其语法与Scala比较相近,所以我才有如此一说。有哪些Scala学习资料以下是我目前主要的学习资料,并衷心欢迎各位留言补充。书籍Programming in Scala:由Scala语言的设计师Martin Odersky编写,循序渐进,配合了大量实例,入门必读吧。Programming Scala:视角与上面那本有点不一样,没有Scala语言基础会感觉很困难,适合掌握了基本语法后温故而知新。在线文档与Scala 官方文档:Scala的,作为寻找资料的出发点是不错的。Scala 课堂:中文版的Scala基本语法在线课堂。Scala Synatax Primer:由Jim McBeath整理的Scala语法概要,可以当字典用。The Neophyte’s Guide to Scala:很出名的一个Scala入门指南,以Scala中的提取器Extractor作为实例开始。Scala 初学指南:这是上面那本指南的中译本。Effective Scala:中文版的Scala高效编程SBT中文入门指南:Scala Build Tool社区Scala 中文社区:不算活跃,原因你懂的。Scala User:Scala入门者聚集地,没有Stack Overflow那么严格,但也需要点爬墙的身手。SDK及IDEJava SE:先装这个Scala SDK:再装这个SBT:然后装这个IntelliJ IDEA:最后装这个,就能比较方便地开始Scala编程了写在最后最近读的书很多也很杂,DDD、BDD、Scala、Cucumber以及Java基础等等都有涉及,真恨不得一口吃成个大胖子。由于时间和精力有限,所以现在知识消化很成问题,迟迟没有进入学以致用的环节,只能先这样纸上谈兵了,好歹先把自己在学习过程中的一些思考、看到的好东西先记载下来,以备将来之需。
10. scala怎么读取hdfs中的文件
scala怎么读取hdfs中的文件前面我们介绍了很多MSI文件的内容,其实MSI并不神秘、复杂,我们内自己都能制作,并容且制作MSI文件的工具已经在Windows的安装盘上了。 首先,找到Windows2000的安装光盘,双击下边的这个位置的文件:valueadd\3rdparty\Mgmt\Winstleadmle.msi, 很快软件就自动安装到了电脑中。在开始菜单的所有程序里边就多了“VERITAS software”组,点击运行里边的“VERITAS discover”就可以开始制作MSI文件了。