Scala笔记

作者: 新的简书 | 来源:发表于2014-12-15 12:19 被阅读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
    

    相关文章

      网友评论

        本文标题:Scala笔记

        本文链接:https://www.haomeiwen.com/subject/jdhotttx.html