zoukankan      html  css  js  c++  java
  • Scala应用函数

    我们使用“_” 来代替单个的参数,实际上你也可以使用“_”来代替整个参数列表,比如说,你可以使用 print _ 来代替 println (_).

    someNumbers.foreach(println _)
    

    Scala编译器自动将上面代码解释成:

    someNumbers.foreach( x => println (x))
    

    因此这里的“_” 代表了Println的整个参数列表,而不仅仅替代单个参数。 当你采用这种方法使用“_”,你就创建了一个部分应用的函数(partially applied function)。 在Scala中,当你调用函数,传入所需参数,你就把函数“应用”到参数。 比如:一个加法函数。

    scala> def sum = (_:Int) + (_ :Int) + (_ :Int)
    sum: (Int, Int, Int) => Int
    
    scala> sum (1,2,3)
    res0: Int = 6
    
    

    一个部分应用的函数指的是你在调用函数时,不指定函数所需的所有参数,这样你就创建了一个新的函数,这个新的函数就称为原始函数的部分应用函数,比如说我们固定sum的第一和第三个参数,定义如下的部分应用函数:

    scala> val b = sum ( 1 , _ :Int, 3)
    b: Int => Int = <function1>
    
    scala> b(2)
    res1: Int = 6
    
    

    变量b的类型为一函数,具体类型为Function1 (带一个参数的函数),它是由sum 应用了第一个和第三个参数,构成的。 调用b(2),实际上调用sum (1 ,2,3)。

    再比如我们定义一个新的部分应用函数,只固定中间参数:

    scala> val c = sum (_:Int, 2, _:Int)
    c: (Int, Int) => Int = <function2>
    
    scala> c(1,3)
    res2: Int = 6
    
    
    

    变量c的类型为Function2,调用c(1,3) 实际上也是调用sum (1,2,3)。

    在Scala中,如果你定义一个部分应用函数并且能省去所有参数,比如println _ ,你也可以省掉“_”本身,比如:

    someNumbers.foreach(println _)
    

    可以写成:

    someNumbers.foreach(println)
    
  • 相关阅读:
    ansible-2添加公钥
    ansible-1 的安装
    history命令显示出详细时间
    nginx配置文件详解
    oracle-7参数文件的管理
    使用gitlab+jenkins+saltstack+rsync自动部署Web应用
    tomcat配置和优化
    pip --upgrade批量更新过期的python库
    apk下载安装,存储的位置,路径
    android中的内部存储与外部存储
  • 原文地址:https://www.cnblogs.com/moonandstar08/p/5240306.html
Copyright © 2011-2022 走看看