Scala-本地函数、偏函数、部分函数-第八章

1)本地函数
  在一个函数内部在定义一个函数,则称为该函数为本地函数

代码示例

    object LocalFunction {
    def main(args: Array[String]): Unit = {
        processData("\\src\\test.txt",10);
        // 本地函数 可以访问外层的变量
        def processData(fileName:String,width: Int): Unit ={ 
            // 本地函数 可以访问外层的变量
            def processLine(line: String) = { 
                if (line.length > width) {
                    println(fileName + ":" + line)
                }
            }
            var source = Source.fromFile(fileName)
            for (line <- source.getLines()) {
                processLine(line)
            }
        }
    }
}
2)偏函数
 1) Scala中部分函数的实现也需要其他方法。用于实现的方法是apply()和isDefinedAt()。另外,您使用case语句来实现它。
 2) apply()方法用于显示功能的应用 ,isDefinedAt()方法用于检查值是否在函数范围内。
 3) 语法: var function_name = new PartialFunction[input_type, return_type]

代码示例

    object MyObject 
{ 
    val divide = new PartialFunction[Int, Int] 
    { 
        def isDefinedAt(q: Int) = q != 0
        def apply(q: Int) = 124 / q 
    } 

    def main(args: Array[String]) 
    { 
        println("该数字除以12是 " + divide(12))
    } 
}
object MyCaseObject {
    val Case1: PartialFunction[Int,String] = {
        case x if(x % 3) != 0 => "ODD"
    }
    val Case2: PartialFunction[Int,String] = {
        case y if(y % 2) == 0 => "Even"
    }
    val evenorodd = Case1 orElse Case2
    def main(args: Array[String]): Unit = {
       var x = 255
        println("---number: is + "+ x +"---------------" + evenorodd(x))
    }
}
3)部分应用函数
object Demon {
    def main(args: Array[String]): Unit = {
        def Stu(grade:Int,name:String,age:Int) = {
            println(s"$grade,$name,$age")
        }

        val level = 1
        def stuInfo =Stu(level,_:String,_:Int)
        stuInfo("zhangsan",25)
    }
}
注意
部分应用函数和偏函数是无关的。经常有人把部分应用函数(Partial Applied Function)和偏函数(Partial Function) 搞混。
总结如下:
1)  部分应用函数(Partial Applied Function)是缺少部分参数的函数,是一个逻辑上概念,部分应用函数只是在“已有函数”的基础上,提供部分默认参数,未提供默认参数的地方使用“_”替代,从而创建出一个“函数值”,在使用这个函数值(部分应用函数)的时候,只需提供“_”部分对应的参数即可。
2)  偏函数是只对函数定义域的一个子集进行定义的函数。 scala中用scala.PartialFunction[-T, +S]类来表示,偏函数则是与函数定义域相关,仅对函数输入参数中的部分取值做出处理的函数就是偏函数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值