偏应用函数.是一种表达式,你不需要提供函数需要的所有参数。代之以仅提供部分,或不提供所需参数
。
def sum(a:Int,b:Int,c:Int)=a+b+c
val a=sum _
a(1,2,3)
scala编译器以偏应用表达式,sum _,实例化一个带三个缺失整数参数的函数值,并把这个新的函数值的索引赋给变量a.当把这个新函数值应用于三个参数之上时,它就回头调用sum,并传入这三个参数:1、2、3.
实际发生的事情是这样的:名为a的变量指向一个函数值对象。这个函数值是由scala编译器依照偏应用函数表达式sum _,自动产生的类的一个实例。编译器产生的类有一个apply方法带有三个参数.scala编译器把表达式a(1,2,3)翻译成对函数值的apply方法的调用。因此a(1,2,3)是 a.apply(1,2.3) 的短格式。
scala编译器根据表达式 sum _ 自动产生的类里的apply方法,简单地把这三个缺失的参数前转到sum,并返回计算结果。
这种一个下划线代表全部参数列表的表达式的另一个用途,就是把它当作转换函数(def)为函数值的方式。尽管不能把方法或嵌套函数通过赋值给变量,或当作参数传递给其他方法,但是如果你把方法或嵌套函数通过在名称后加一个下划线的方式包装在函数值中,就可以做到了。
下划线代表部分参数:
val b=sum(1,_:Int,3)
b(2)
如果你正在写一个省略所有参数的偏应用程序表达式,如println _ 或 sum _,而且在代码的那个地方正需要一个函数,你可以去掉下划线从而表达得更简明。
val someNumbers=List(-11,-10,4,12,4)
someNumbers.foreach(println _)
//可以简写成
someNumbers.foreach(println)
注:上述东西是从scala向导摘录来的(感谢scala圈子里的大虾)。
分享到:
相关推荐
应用组合学(Applied Combinatorics)是一门研究离散对象组合方式的数学分支,它在计算机科学、统计学、物理学以及许多其他领域中都有着广泛的应用。本书《应用组合学》(Applied Combinatorics)是由Mitchel T. ...
此外,弯曲函数还存在许多子类,如超弯曲函数(hyper-bent functions)和部分弯曲函数(partially bent functions),以及相关的码(Kerdock codes)等。 #### 具有弹性的布尔函数 具有弹性的布尔函数(resilient ...
书中会详细介绍如何定义和使用高阶函数,以及如何通过柯里化(Currying)和部分应用(Partially Applied Function)来构造更灵活的函数。 其次,函数式编程中的纯函数(Pure Function)是无副作用的,输入与输出...
柯里化的本质是部分应用(Partially Applied Function),即将函数的部分参数提前应用,得到一个新的只差剩余参数的函数。这样可以简化复杂函数的调用,提高代码的可读性和复用性。 在`main.js`中,我们可以预期...
咖喱化,或称为部分应用(Partially Applied Function),是函数式编程中的一个重要特性,尤其在JavaScript这样的语言中,它可以将接受多个参数的函数转换为一系列只接受一个参数的函数。这样做的好处是可以提前固定...
`map`函数允许我们将一个函数应用到序列的所有元素上,返回一个新的序列,其中每个元素都是原序列对应元素经过函数处理的结果。例如,如果你有一个列表,你想将所有元素都乘以2,funcy的`map`就能帮你实现。 2. **...
1. **Partially Applied Functions**:在Python中,部分应用(Partial Application)是一种常见的函数组合技术,它可以提前固定函数的一部分参数,从而创建新的函数。`jaraco.functools`提供了一种更灵活的方式来...
在ZEMAX中,这些可以通过设置物体属性和使用内置的散射函数来实现。 具体步骤如下: 1. **定义涂层**:创建一个理想涂层,其反射率为60%,并将其应用于矩形体的前表面。 2. **设置散射轮廓**:对这个表面应用朗伯...
标题中的“PV_MPPT_Partially.slx带有粒子群算法”指的是一个Simulink模型,该模型用于太阳能光伏(PV)系统的最大功率点跟踪(Maximum Power Point Tracking, MPPT)并应用了粒子群优化(Particle Swarm ...
Scala 中,可以使用部分应用函数(Partially Applied Function)来实现柯里化,提高代码的灵活性和复用性。 5. **递归**: 递归是函数式编程中的基础概念,它允许函数调用自身。Scala 支持尾递归优化,当递归调用...
这使得部分应用(Partially Applied Function)成为可能,增加了代码的灵活性。 9. Pointfree风格 Pointfree风格是Haskell中一种编写函数的风格,不直接引用函数的参数,而是通过函数组合来表达。例如,`f . g` ...
图像去模糊的代码,可以直接应用。Deblurring Shaken and Partially Saturated Images
这对于部分应用(Partially Applied Function)非常有用: ```javascript function greet(name, greeting) { console.log(greeting + ', ' + name); } let sayHelloToAlice = greet.bind(null, 'Alice', '...
A novel reconfigurable partially reflective surface (PRS) antenna is presented in this paper. The beam scanning ability is realized by employing a reconfigurable PRS structure and a phased array as ...
该方法的核心思想是从未标记的测试数据中提取更有效的特征,并通过集成学习中的Boosting技术将这些特征融入到排序函数的学习过程中,从而为每个特定的查询定制不同的排序函数。实验结果表明,这种方法能够显著提高...
这一发现对于实际应用是非常有价值的,因为它意味着研究者和数据分析师在使用部分线性模型时,可以通过该适应性半参数估计方法获得更为准确和高效的估计结果。 作为首发论文,该研究在半参数统计领域代表了最新的...
Riesz插值性质在数学中有着广泛的应用,比如在格理论、泛函分析等领域中。 在这篇论文中,作者们不仅定义了弱Riesz插值性质,还考虑了在偏序幺半群中的(pR)条件和(WpR)条件。其中(pR)条件是关于某些元素对的,与...
部分映射交叉算子(Partially Mapped Crossover, PMX)是一种广泛应用的交叉策略,尤其适用于解决排列问题。在Matlab环境中,PMX算子通常用于实现各种组合优化问题,如旅行商问题、任务调度等。下面将详细解释PMX...
此外,它可能还强调了在实际应用中如何处理部分可观测性问题(Partially Observable Markov Decision Process, POMDP),以及连续状态和动作空间的挑战。 在强化学习中,关键的概念有:状态(state)、动作(action)、...