美文网首页
六 scala函数与方法

六 scala函数与方法

作者: 谁动了MyWorld | 来源:发表于2016-12-09 01:00 被阅读505次

    1.定义方法

    1. 带参不带返回值
    scala> def main(args: Array[String]) :Unit = {println(args.length)}
    main: (args: Array[String])Unit
    scala> main(Array("a","b"))
    2
    scala>
    

    使用Unit其实也有返回值,只不过返回值为空:Unit的实例:()

    1. 带参带返回值
      方法的返回值类型可以不写,编译器可以推断出来,但是对于递归函数,必须指定返回类型
    scala> def add(x: Int) : Int = x + 1
    add: (x: Int)Int
    scala> add(1)
    2
    scala>
    
    1. 无参无返回值
    scala> def sayHello() :Unit = {println("hello")}
    sayHello: ()Unit
    scala> sayHello()
    hello
    scala>
    

    2.定义函数

    1. 函数的定义,在scala中,函数也是一个对象,可以用一个变量来引用
    scala> var fun = (x: Int) => x * 10
    fun: Int => Int = <function1>
    

    function1:表示fun这个变量的类型是function,而且是一个参数的函数

    1. 函数的调用
    scala> fun(3)
    res: Int = 30
    
    1. 匿名函数
    scala> (x: Int, y: Int) => x + y
    res29: (Int, Int) => Int = <function2>
    scala> res29(2,6)
    res30: Int = 8
    
    1. scala的函数与方法的区别
    • 函数包含 =>,方法的定义使用:def
    • 函数是可以作为参数传入方法里面的的,而方法是不可以作为参数的
    • eg:arr数组调用map方法,传入(x: Int) => x10匿名函数将数组中的每个元素执行10操作
    scala> val arr = Array(1,2,3,4,5)
    arr: Array[Int] = Array(1,2,3,4,5)
    scala> arr.map((x: Int) => x*10)
    res31: Array[Int] = Array(10,20,30,40,50)
    scala> arr.map(x => x*10)
    res32: Array[Int] = Array(10,20,30,40,50)
    scala> arr.map(_*10)
    res33: Array[Int] = Array(10,20,30,40,50)
    
    • 函数的变体
    scala> var f: Int => Int = {x => x * x}
    f: Int => Int = <funtion1>
    

    解析: 定义一个函数f,接受一个int类型的参数,返回值为int。 函数的实现为{x => x*x}

    3.将方法转换成函数

    定义一个函数myFun,参数为一个方法(f: Int => Int)Unit,传入方法f0.

    scala> def myFun(f: Int => Int){
                printfln(f(100))
            }
    myFun: (f: Int => Int)Unit
    
    scala> val f0 = (x: Int) => x*x
    f0: Int => Int = <function1>
    
    scala> myFun(f0)
    10000
    

    在定义一个方法f1.不能把一个方法当做参数传入另外一个方法,只能把一个方法的方法名当做参数,传入到另外一个方法中,如果在一个方法中传入方法名,会将方法名转换成一个函数

    scala> def f1(x: Int) = x*x
    f1: (x:Int)Int
    
    scala> f1(4)
    res34: Int = 16
    
    scala> myFun(f1(4))
    <console>:11: error: type mismatch;
    found    :Int
    required :Int => Int
    
    scala> myFun(f1)
    10000
    
    scala> f1 _
    res35: Int => Int = <function1>
    
    scala> myFun(f1 _)
    10000
    
    scala> myFun(x => f1(x))
    10000
    

    相关文章

      网友评论

          本文标题:六 scala函数与方法

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