相关分享
Scala 3 不再支持 XML 了吗?
前段时间,我为Scala 3提出了XML字面量语法提案,在社区中正在讨论。这个提案可能预示着 Scala 3、Scala.js和Binding.scala的未来前景。为什么这么说?还得先聊聊Scala目前在编程语言界的江湖地位是怎么来的。
Scala入门到精通——第三十节 Scala脚本编程与结束语
本节主要内容 REPL命令行高级使用 使用Scala进行Linux脚本编程 结束语 1. REPL命令行高级使用 在使用REPL命令行时,有时候我们需要粘贴的代码比较大,而普通的粘贴可能会些一些问题,比如中文粘贴会出现乱码、多行代码粘贴时会出错,此时需要用到REPL的高级功能。
Scala快速入门-5-类定义
系列文章:
Scala快速入门系列:声明变量、控制结构与函数、常用数组操作
Scala快速入门-4-常用映射和元组操作
知识点
每个类都有一个主构造器,这个构造器和类的定义“交织”在一起,它的参数直接成为类的字段,主构造器执行类体中所有的语句
类中的字段自动带getter和setter方法
用@BeanProperty注解生成JavaBean的getXxx/setXxx方法
辅助构造器是可选的,它们都叫做this
类定义
定义及使用
Scala快速入门系列:声明变量、控制结构与函数、常用数组操作
Scala快速入门-1-声明变量
背景
因为Spark是由Scala开发的,所以在开发Spark应用程序之前要对Scala语言学习。虽然Spark也支持Java、Python语言,但是作为一名Java程序猿,还是决定要学习Scala哈。
Scala是运行在JVM上一门语言。开发效率非常高、语法丰富简洁,三两行Scala代码能搞定Java要写的一大坨代码。
Scala的语法糖太甜~~
Scala特性
面向对象特性
IntelliJ-IDEA-Mavne-Scala-Spark开发环境搭建
背景
几乎所有编程语言的第一个程序都是 Hello World。
下载并安装JDK、Scala、Maven
之前的Hadoop HA 和 Spark集群的文章中已经安装过JDK、Scala。Maven安装也很简单,略。
下载Idea并安装Scala插件
在线安装有点慢,但网上很多方法解决,略。
创建一个maven-scala工程
我的第一个scala程序
帮同事处理List[scala.collection.immutable.Map[String,Any]]的排序问题
原来想的办法是
var x = mylist.sortWith(_.get(\"commonCount\").toString > _.get(\"commonCount\").toString)
_.get(\"commonCount\")可以取出值,但类型是 Some,要用_.get(\"commonCount\").get 来获取真实类型
scala> println(mylist.map(_.get(\"commonCount\").get.getClass))
List(class java.lang.Integer, class java.lang.Integer, class java.lang.Integer, class java.lang.Integer, class java.lang.Integer)
知道真实的数据类型,但在实际使用时要转换成基本类型.asInstanceOf[Int],进行判断
DeepLearning.scala 2.0:以Map/Reduce等lambda表达式创建动态神经网络的开源框架
史上最简单的Scala for推导教程
Scala 的 for 语法,本质上就是语法糖。并且十分简单,简单到简短的一篇文章,就可以说清楚。
Scala 中的 for 语句,都是帮你转换成类似 foreach、 map、 flatMap、 withFilter、 filter 之类的语法。并且整个转化过程是递归的,容易理解的。
看完下面是几个例子,你就能立马掌握。这几个例子,是结合了 Scala 官方的yield文档 改进过来的。
第一个例子,转换成 foreach
for(x <- c1) {...}
会被scalac翻译成
c1.foreach(x => {...})
注意,没有出现 yield 关键字。
再来一个:
for(x <- c1; y <- c2) {...}
会展开成:
c1.foreach(x => for(y <- c2) {...})
然后 scalac会再针对里面的 for 再进行转换,直到所有的 for 被转换完。
第二个例子,先 flatMap后 map
for(x <- c1) yield {...}
会被 scalac翻译成
c1.map(x => {...})
注意,这里出现了 yield关键字。
再来一个:
for(x <- c1; y <- c2) yield {...}
会展开成:
c1.flatMap(x => for(y <- c2) yield {...})
然后再展开成
c1.flatMap(x => c2.map( y => {...}))
注意这里多了一个 yield 关键字,所以会用 flatMap、 map 而不用 foreach。
并且,前面的都使用 forMap(比如 c1),最后面使用 map(比如 c2)。
好了,有无 yield的区别讲完了,这也是最重要的区别了,剩下的都很简单,而且不管有无 yield,概念都一样。
接着往下。
第三个例子,尝试 withFilter ,不行再 filter
for(x <- c; if cond) yield {...}
会翻译成
c.withFilter(x => cond).map(x => {...})
如果 c 没有 withFilter 方法,就使用 filter 方法:
c.filter(x => cond).map(x => {...})
第四个例子,加入其它值
for(x <- c; y = ...) yield {...}
会变成
c.map(x => (x, ...)).map((x,y) => {...})
结束
好了,scala 的 for 规则就结束了,就是这么简单。你肯定能记住。
