scala

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scala相关的知识,希望对你有一定的参考价值。

模式匹配
  1. 在jdk1.7之前,Java的 switch 关键字只可以处理原生类型(int 、short 、byte 、char)和枚举类型。在jdk1.7以后,switch新增了对String类型的处理。
    scala的模式匹配则可以处理各种复杂的类型以及场景。
  2. 常量匹配、变量匹配、列表和元组匹配
    技术图片
    在最后一行指令中_是一个通配符,它保证了我们可以处理所有的情况。否则当传进一个不能被匹配的值的时候,你将获得一个运行时错误。
    Nil是一个空的List,定义为List[Nothing]。
    技术图片
    技术图片
  3. 类型匹配
    技术图片
    case 子句支持"或"逻辑,使用|即可;

闭包

闭包是一个函数,返回值依赖于声明在函数外部的一个或多个变量。
闭包通常来讲可以简单的认为是可以访问一个函数里面局部变量的另外一个函数。
比如函数:val multiplier = (i:Int) => i * factor;factor不是形式参数,而是自由变量;这样定义的函数变量 multiplier 成为一个"闭包",因为它引用到函数外面定义的变量,定义这个函数的过程是将这个自由变量捕获而构成一个封闭的函数。
技术图片

柯里化函数

将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数。
def sum(x:Int,y:Int)=x+y,柯里化之后就是def sum(x:Int)(y:Int) = x + y。
这个函数是什么意思呢? 接收一个x为参数,返回一个匿名函数,该匿名函数的定义是:接收一个Int型参数y,函数体为x+y

偏函数与偏应用函数

偏函数不是函数,Scala中的Partia Function是一个Trait,其的类型为PartialFunction[A,B],其中接收一个类型为A的参数,返回一个类型为B的结果。技术图片
偏函数内部有一些方法,比如isDefinedAt、OrElse、 andThen、applyOrElse

  1. isDefinedAt:判断传入的参数是否在处理范围内技术图片
  2. orElse : 将多个偏函数组合起来使用,效果类似case语句。技术图片
  3. andThen: 相当于方法的连续调用,比如g(f(x))。技术图片
  4. applyOrElse:它接收2个参数,第一个是调用的参数,第二个是个回调函数。如果第一个调用的参数匹配,返回匹配的值,否则调用回调函数。
    技术图片

偏应用函数,是指一个函数有n个参数, 而我们为其提供少于n个参数, 那就得到了一个部分应用函数。
技术图片

object与class

scala 中没有 static 关键字
所以 对于一个class来说,所有的方法和成员变量在实例被 new 出来之前都是无法访问的;
scala object 中所有成员变量和方法默认都是 static 的;
所以只有object中的main方法是可以直接访问的。

scala中集合

map定义:var verMap = Map[String, String]()
map添加元素:verMap += (mapKey -> categeryName)
list定义:var listNewValue: List[String] = List()
list添加元素:listNewValue :+= mulValue

以上是关于scala的主要内容,如果未能解决你的问题,请参考以下文章

ScalaScala学习资料

ScalaScala技术栈

ScalaScala之Numbers

ScalaScala之String

ScalaScala的Predef对象

ScalaScala之Control Structures