scala02--函数

和java也挺像的
不要return就可以返回

可变参数

这个java也有,差不多

  def main(args: Array[String]) {
    printStrings("Runoob", "Scala", "Python");
  }

  def printStrings(args: String*) = {
    for (arg <- args) {
      println(arg)
    }
  }

参数可以指定默认值

   def main(args: Array[String]) {
        println( "返回值 : " + addInt() );
   }
   def addInt( a:Int=5, b:Int=7 ) : Int = {
      var sum:Int = 0
      sum = a + b
      return sum
   }

函数传名调用

可以理解为函数的参数是一个函数,也就是可以将函数的返回值当做参数

   def main(args: Array[String]) {
        delayed(time());
   }

   def time() = {
      println("获取时间,单位为纳秒")
      System.nanoTime
   }
   def delayed( t: => Long ) = {
      println("在 delayed 方法内")
      println("参数: " + t)
      t
   }

指定函数参数名

直接指定设置哪个参数的值了,不需要像java一样必须按照顺序了,感觉一般是和默认值搭配使用的

object Test {
   def main(args: Array[String]) {
        printInt(b=5, a=7);
   }
   def printInt( a:Int, b:Int ) = {
      println("Value of a : " + a );
      println("Value of b : " + b );
   }
}

匿名函数

   def main(args: Array[String]) {
      println( "multiplier(1) value = " +  multiplier(1) )
   }
   var factor = 3
   val multiplier = (i:Int) => i * factor

偏应用函数

其实是匿名函数去调用函数的一种组合

  def main(args: Array[String]): Unit = {
    val t = test("aa", _: String)
    t("bb")
  }

  def test(a: String, b: String): Unit = {
    println(a + b)
  }

函数嵌套

感觉更改过多用于递归

  def main(args: Array[String]): Unit = {
    println(factorial(0))
  }

  //一般都有返回值
  def factorial(i: Int): Int = {
    def fact(i: Int, accumulator: Int): Int = {
      if (i <= 1)
        accumulator
      else
       //调用自己
        fact(i - 1, i * accumulator)
    }
    //调用这个内部函数
    fact(i, 1)
  }

递归

   def main(args: Array[String]) {
         println(factorial(7) )
   }
   
   def factorial(n: BigInt): BigInt = {  
      if (n <= 1)
         1  
      else    
      n * factorial(n - 1)
   }

高阶函数

Scala 中允许使用高阶函数, 高阶函数可以使用其他函数作为参数,或者使用函数作为输出结果。
把函数f和一个值v当做参数,内部可以用这个传过来的参数,这样就可以通过传入不同的参数而进行各种组合

   def main(args: Array[String]) {
      println( apply( layout, 10) )
   }
   // 函数 f 和 值 v 作为参数,而函数 f 又调用了参数 v
   def apply(f: Int => String, v: Int) = f(v)
   def layout[A](x: A) = "[" + x.toString() + "]"

函数柯里化(Currying)

def add(x:Int,y:Int)=x+y

可以这样写

def add(x:Int)=(y:Int)=>x+y

闭包

闭包通常来讲可以简单的认为是可以访问一个函数里面局部变量的另外一个函数。
如下面这段匿名的函数:

val multiplier = (i:Int) => i * 10  

函数体内有一个变量 i,它作为函数的一个参数。如下面的另一段代码:

val multiplier = (i:Int) => i * factor
object Test {  
   def main(args: Array[String]) {  
      println( "muliplier(1) value = " +  multiplier(1) )  
      println( "muliplier(2) value = " +  multiplier(2) )  
   }  
   var factor = 3  //这个位置是可以根据你的需求去改变的甚至输入的
   val multiplier = (i:Int) => i * factor  
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

orange大数据技术探索者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值