加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读