Scala教程(十)函数与闭包详解


 

Scala教程()函数与闭包详解

 

1 函数


1.1 本地函数

  函数式编程风格的一个重要设计原则:程序应该被解构成若干小的函数,每个完成一个定义良好的任务。单个函数经常很小。这种风格的好处是它给了程序员许多可以灵活组装成更复杂事物的建造模块。每个小块应该充分简化到足以单独理解。

   Scala中提供了可以把函数定义在另一个函数中。就好象本地变量那样,这种本地函数仅在包含它的代码块中可见。

  def processData(fileName:String,width:Int){
      // 本地函数
      def processLine(line:String){
          // 长度大数指定的长度,进行打印
          if(line.length() > width){
              println(fileName+":"+line)
          }
      }
      
      // 读取文件
      val source = Source.fromFile("E:\\input.txt");
      for(line <- source.getLines()){
          processLine(line);
      }
  }

 processLine的定义放在processFile的定义里。作为本地函数,processLine的范围局限于processFile之内,外部无法访问。


1.2 函数值

  函数文本被编译进一个类,类在运行期实例化的时候是一个函数值:function value。因此函数文本和值的区别在于函数文本存在于源代码,而函数值存在于运行期对象。

    // =>指明这个函数把左边的东西(任何整数x)转变成右边的东西(x + 1)。所以,这是一个把任何整数x映射为x + 1的函数。
    var increase = (x:Int) => x+1;

    // 执行结果:11
    println(increase(10))
    
    // 因为increase是var,你可以在之后重新赋给它不同的函数值。
    increase = (x: Int) => x + 9999
    
    // 执行结果:10009
    println(increase(10));    
    
    // 所有的集合类都能用到foreach方法。
    val someNumbers = List(-11, -10, -5, 0, 5, 10)
    someNumbers.foreach((x: Int) => println(x))

    输出结果:

         -11

         -10

         -5

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值