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)
    
  • 相关阅读:
    A Node Influence Based Label Propagation Algorithm for Community detection in networks 文章算法实现的疑问
    Fast Newman-FN算法以及模块度定义介绍
    Label Propagation Algorithm LPA 标签传播算法解析及matlab代码实现
    设计一个smartnic
    Intel GEN11 GPU
    Intel GEN9 GPU
    Shared Virtual Memory (SVM) Functions
    connect via ssh to virtualbox guest vm without knowing ip address
    smartnic
    技术精品翻译
  • 原文地址:https://www.cnblogs.com/moonandstar08/p/5240306.html
Copyright © 2011-2022 走看看