Scala
拾荒路上的开拓者
可能出错的地方,一定会出错
展开
-
scala的闭包
闭包在spark中经常会看到,但理解也不难,按照闭包的构造可进行如下定义:闭包首先有函数嵌套,内部函数引用外部函数的变量,然后返回一个函数举个栗子:object SparkDemo01 { def main(args: Array[String]): Unit = { println(makeAdd()(20)) } def makeAdd() = {...原创 2019-01-28 23:18:27 · 597 阅读 · 0 评论 -
Scala中Either两个子类Left/Right
Scala中有Left,Right两个类,继承于Either,主要用途是表示两个可能不同的类型(它们之间没有交集),Left主要是表示Failure,Right表示有,跟Some类型有点类似。案例:object EitherLeftRightExample extends App { /** * A simple method to demonstrate how to d...原创 2019-04-17 23:43:07 · 1018 阅读 · 0 评论 -
Scala中private与private[this]的区别
首先来看看Scala编译器分别对private和private[this]都了什么?定义一个Person.scala类,如下:package personclass Student(val name:String, var age:Int) { private var job = "Programmer" private[this] var salary = 3000F}...原创 2019-04-08 21:08:23 · 2649 阅读 · 0 评论 -
Scala传名参数和传值参数(by-name/by-value parameter)
1介绍传值参数在函数调用之前表达式会被求值,例如Int,Long等数值参数类型;传名参数在函数调用前表达式不会被求值,而是会被包裹成一个匿名函数作为函数参数传递下去,例如参数类型为无参函数的参数就是传名参数。2简单类型的传递示例2.1传值参数(by-valueparameter)在下面的示例中,编译器检测到strToInt接受一个传值参数,所以先对传入的参数表达式 {pri...原创 2019-03-28 21:40:57 · 566 阅读 · 0 评论 -
Scala的sealed关键字
Scala中sealed关键字可以修饰类和特质,其主要有2个作用:其修饰的trait,class只能在当前文件里面被继承; 在检查模式匹配的时候,用sealed修饰目的是让scala知道这些case的所有情况,scala就能够在编译的时候进行检查,看你写的代码是否有没有漏掉什么没case到,减少编程的错误。比如下面的代码,声明了两个trait,其中Test2是sealed声明:tra...原创 2019-03-27 22:15:16 · 336 阅读 · 0 评论 -
Scala中class、object、case class、case object的区别
导读Scala中class类似Java中的class;object Scala不能定义静态成员,用定义单例对象代之;caseclass被称为样例类,是一种特殊的类,常被用于模式匹配。1 class和object的关系(1)单例对象不能带参数,类可以(2)对象和类名一样时,object被称为伴生对象,class被称为伴生类(3)类和伴生对象可以相互访问其私有属性,但是...原创 2019-04-05 14:20:43 · 3260 阅读 · 0 评论 -
Scala的Any/AnyVal/AnyRef/Nothing
AnyAny是abstract类,它是Scala类继承结构中最底层的。所有运行环境中的scala类都是直接或间接继承自Any这个类,它就是其它语言(.Net,Java等)中的Object。AnyValAnyVal 所有值类型的基类, 它描述的是值,而不是代表一个对象。它包括 9 个 AnyVal 子类型:scala.Doublescala.Floatscala.Long...原创 2019-03-31 09:57:24 · 748 阅读 · 0 评论 -
Scala柯里化
1什么是柯里化柯里化(Currying)指的是把原来接受多个参数的函数变换成接受一个参数的函数过程,并且返回接受余下的参数且返回结果为一个新函数的技术。2例子(1)一个普通的非柯里化的函数定义,实现一个加法函数:scala> def plainOldSum(x:Int,y:Int)=x+yplainOldSum: (x: Int, y: Int)Intscal...原创 2019-03-30 11:21:46 · 424 阅读 · 0 评论 -
Scala的关键字lazy
Scala中使用关键字lazy来定义惰性变量,实现延迟加载(懒加载)。惰性变量只能是不可变变量,并且只有调用惰性变量时,才会去实例化这个变量。在Java中,要实现延迟加载(懒加载),需要自已手动实现。一般的做法是这样的:public class JavaLazyDemo { private String name; //初始化姓名为Lazy private S...原创 2019-03-30 13:11:30 · 342 阅读 · 0 评论 -
Scala偏函数
被包在花括号内没有match的一组case语句是一个偏函数,它是PartialFunction[A, B]的一个实例,A代表输入参数类型,B代表返回结果类型,常用作输入模式匹配,偏函数最大的特点就是它只接受和处理其参数定义域的一个子集。object PartialFuncDemo { //没有match的偏函数 val func1: PartialFunction[String, ...原创 2019-03-25 23:28:09 · 201 阅读 · 0 评论 -
Scala之ClassTag、Manifest、ClassManifest、TypeTag的关系
笔者在阅读Spark源码时,发现源码处大量地方用到ClassTag,一开始还无法理解其中的含义,后面慢慢查询与学习,整理出部分的内容。在Scala中应用大量的数组,按照Scala的语法来说是不能创建泛型数组,因为Scala编译时必须要确定它的类型,否则编译都不能通过,但是Scala中引入了Manifest,Manifest可以有效解决这个问题下面先来看个案例:object demo ...原创 2019-04-19 23:22:00 · 358 阅读 · 0 评论