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

Scala:当需要函数参数类型时?

发布时间:2020-12-16 09:23:59 所属栏目:安全 来源:网络整理
导读:Scala中可以定义多种功能,这些功能会在需要何种功能参数类型时产生混淆.我通常从最简单的可能定义开始,直到编译器错误消失为止.我宁愿真正了解这是如何工作的. 例如: _ + _(x,y) = x + y(x: Int,y: Int) = x + ydef sum(x: Int,y: Int) = x + y // as point
Scala中可以定义多种功能,这些功能会在需要何种功能参数类型时产生混淆.我通常从最简单的可能定义开始,直到编译器错误消失为止.我宁愿真正了解这是如何工作的.

例如:

_ + _

(x,y) => x + y

(x: Int,y: Int) => x + y

def sum(x: Int,y: Int) = x + y // as pointed out,this is a method,// which not a function

获得文档链接的积分.

解决方法

那么有一些角落的情况,如:递归方法必须明确键入,但通常的经验法则如下:类型必须来自某个地方.

他们来自参考部分:

val function: (Int,Int) => Int = _ + _

或从对象部分:

val function = (x: Int,y: Int) => x + y

不重要(在Scala!)

我知道你的问题是关于函数,但下面是一个类似的示例来说明Scala的类型推断:

// no inference
val x: HashMap[String,Int] = new HashMap[String,Int]()
val x: HashMap[String,Int]

// object inference
val x: HashMap[String,Int] = new HashMap()
val x: HashMap[String,Int] = new HashMap
val x: HashMap[String,Int] = HashMap() // factory invocation

// reference inference
val x = new HashMap[String,Int]()
val x = new HashMap[String,Int]
val x = HashMap[String,Int]() // factory invocation

// full inference
val x = HashMap("dog" -> 3)

编辑根据要求,我添加了高阶函数的情况.

def higherOrderFunction(firstClassFunction: (Int,Int) => Int) = ...

可以这样叫:

higherOrderFunction(_ + _) // the type of the firstClassFunction is omitted

但是,这不是一个特例.明确提到了引用的类型.以下代码说明了一个类似的例子.

var function: (Int,Int) => Int = null
function = _ + _

这大致相当于高阶函数的情况.

(编辑:李大同)

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

    推荐文章
      热点阅读