Scala编程与实践

Scala笔记

2014-12-15  本文已影响280人  新的简书

Scala基础

学习twitter的scala教程的笔记


函数

  1. 函数定义,scala语法中可以使用多种方式定义函数,比如:
    • 直接用等号定义,def func(x:Int):Int = x+1
    • 用大括号定义
    def func2(x:Int):Int = {
        return x+1
    }
* 用匿名函数定义,`val func3=(x:Int)=> x+1`,可以使用大括号{},`val func3=()=>{x+1}`,在此例中func3为方法名,等号为赋值,可以理解为将等号后面的内容赋值给func3。
  1. 匿名函数是指用户可以定义一个函数,而不用指定这个函数的名称。可以对比思考Java语言中的匿名类,语法为(x:Int)=>x+1 或者使用括号{},(x:Int)=>{x+1},返回值类型为=>后的最后一个表达式
  2. 有类型的函数,scala函数的函数其实都是对象,所以可以通过赋值的方式定义,那么既然是对象,就有类型。scala函数的类型都是这个样子的:scala.Function1[Int,Int]。Function1指的是一个入参的函数,顾名思义Function2是两个入参的函数。最多可以有22个入参。既然是对象,就有方法,函数的执行,使用过基类的apply方法调用的。所以如果我明定义func3为一个函数类型的对象,那么可以通过func3.apply()的方式执行func3函数。
  3. 函数作为参数使用,因为函数使用类型的,那么就可以作为参数传递。比如:
object Main extends App {
      println(timesTwo(2))
      println(best(2,(x:Int)=>x+1))
      println(best(2,timesTwo))

      def timesTwo(i:Int):Int={
        i*2
      }

      def best(i:Int,f:scala.Function1[Int,Int]): Int ={
        return f.apply(i)
      }
}
  1. 偏函数与柯理化函数,这是函数部分最复杂的内容了。先说偏函数化(partial application),在scala中有种东西叫”“。如果下划线出现在函数的参数中,那么就意味着这个参数的值还不确定,有点类似于占位符或者通配符的概念,如果调用一个函数的时候,向一个参数中传递了”“,那么这次调用不会返回值,而是返回另一个函数,函数的入参就是刚才被"_"占位的参数列表。而柯里化函数是更加明确的使用偏函数。可以通过函数上的curried方法讲一个普通函数转为柯里化函数。例子:
def multiply(m:Int)(n:Int):Int=n*m
val multiply2=(m:Int,n:Int)=> n*m
val multiply3=multiply2.curried
上一篇 下一篇

猜你喜欢

热点阅读