Java和Scala的区别

1.变量的申明
Scala中val代表常量,var代表变量。Scala更多的采用val,减少了多线程并发问题。
2.隐式转换
隐式转换函数是以implicit关键字声明的带有单个参数的函数。这种函数将会自动应用,将值从一种类型转换为另一种类型。

 implicit def a(d: Double) = d.toInt //不加上边这句你试试
val i1: Int = 3.5
println(i1)

3.函数式编程理解
Scala中函数的地位:一等公民
Scala中的匿名函数(函数字面量)
Scala中的高阶函数
Scala中的闭包
Scala中的部分应用函数
Scala中的柯里化函数
4.样例类

case class Person(name:String,age:Int)

5.柯里化
函数编程中,接收多个参数的函数都可以转化为接收单个参数的函数,这个转化过程就叫柯里化,柯里化证明了函数只需要一个参数。

def mul(x:Int, y:Int) = x*y
    println(mul(10,10))
    def mulCurry(x:Int) = (y:Int) => x*y
    println(mulCurry(10)(9))
    def mulCurry2(x:Int)(y:Int) = x*y
    println(mulCurry2(10)(8))

柯里化应用:比较两个字符串在忽略大小写的情况下是否相等

 val a = Array("Hello", "World")
    val b = Array("hello", "world")
    print(a.corresponds(b)(_.equalsIgnoreCase(_)))
其中corresponds函数的源码如下:
  def corresponds[B](that: GenSeq[B])(p: (A,B) => Boolean): Boolean = {
    val i = this.iterator
    val j = that.iterator
    while (i.hasNext && j.hasNext)
      if (!p(i.next(), j.next()))
        return false

    !i.hasNext && !j.hasNext
  }

6.闭包
一个函数把外部的那些不属于自己的对象也包含进来
案例1:

def minusxy(x:Int) = (y:Int)=>x - y
这就是一个闭包:
a.匿名函数(y:Int)=x-y嵌套在minusxy函数中
b.匿名函数(y:Int)=x-y使用了该匿名函数之外的变量x
c.函数minusxy返回了引用局部变量的匿名函数

案例2:

def minusxy(x:Int)=(y:Int)=>x-y
val f1=minusxy(10)
val f2=minusxy(10)
println(f1(3)+f2(3))
此处f1,f2这两个函数就叫作闭包

你可能感兴趣的:(Java和Scala的区别)