在Scala中讨论,使这些语句编译的类型是什么?
发布时间:2020-12-16 18:55:51 所属栏目:安全 来源:网络整理
导读:所以我在 Scala中有这个功能: def f(a: Int)(b: Int)(c: Double)(d: Double): Double = a * c + b * d 问题是使以下语句编译的三种类型是什么. def g: Type1 = f(1)(2)(3.0) def h: Type2 = f(1)(2) def k: Type3 = f(1) 我还是Scala的新手,我并不是真正理
所以我在
Scala中有这个功能:
def f(a: Int)(b: Int)(c: Double)(d: Double): Double = a * c + b * d 问题是使以下语句编译的三种类型是什么. def g: <Type1> = f(1)(2)(3.0) def h: <Type2> = f(1)(2) def k: <Type3> = f(1) 我还是Scala的新手,我并不是真正理解currying的概念.也许通过一些解释回答这个问题对我很有帮助.谢谢. 解决方法
首先,一个主要的事情:带有两个参数a和b并返回值c的函数可以看作是一个带a的函数并返回一个带b并返回c的函数.这种“观点的改变”被称为currying.
想象一下总结两个数字的函数.你给它2和3,它返回5.它可以被视为一个函数,它接受一个数字并将一个函数从一个数字返回一个数字.你给它一个2,它返回一个函数,它需要一些数字并加2. 现在,您请求的一些类型: // pseudocode! def g: Double => Double = f(1)(2)(3.0) // we supply three params and are left with only one,"d" = (d: Double) => 1 * 3.0 + 2 * d // we comply with g's type def h: Double => Double => Double // or (Double,Double) => Double = f(1)(2) // we supply two params and are left with two more,"c" and "d" = (c: Double)(d: Double) => 1 * c + 2 * d // we comply with h's type def k: Double => Double => Double => Double // or (Double,Double,Double) => Double = f(1) // we supply one param and are left with three more,"b","c" and "d" = (b: Double)(c: Double)(d: Double) => 1 * c + b * d // we comply with k's type (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 基于Node(bootstrap+ejs+express+formidable+fs-extra)制
- centos docker 安装gitlab
- angularjs – 角度定时器不工作
- angular4 @ViewChild ElementRef renderer
- angularjs – 在Ionic中渲染HTML内容
- 使用angular-cli发布i18n多国语言Angular应用
- angular2无法解析’RequestOptions’的所有参数(?)
- 如何在我的Play2 scala应用程序中执行json读取和写入时排除
- Bootstrap Accordion使用小技巧
- 更改Vim交换/备份/撤消文件名