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

Scala强调用于简化函数文字的语法

发布时间:2020-12-16 18:37:35 所属栏目:安全 来源:网络整理
导读:我有以下代码: var x = Array(1,3,4,1,3)var m = Int.MaxValuex.foreach((x)=(m = m min x)) 我试图将最后一句简化为: x.foreach((m = _ min m)) 但口译员说: scala x.foreach((m = _ min m)) console:8: error: missing parameter type for expanded fun
我有以下代码:

var x = Array(1,3,4,1,3)
var m = Int.MaxValue
x.foreach((x)=>(m = m min x))

我试图将最后一句简化为:

x.foreach((m = _ min m))

但口译员说:

scala>  x.foreach((m = _ min m))     
<console>:8: error: missing parameter type for expanded function ((x$1) => x$1.min(m))
    x.foreach((m = _ min m))
                   ^

我试图更明确地说明这种类型:

scala>  x.foreach((m = (_:Int) min m))
<console>:8: error: type mismatch;
found   : (Int) => Int
required: Int
    x.foreach((m = (_:Int) min m))
                           ^

编译器和我彼此不了解:(

最好的祝福,

斯坦

解决方法

首先,请注意

val m = x.min

像你一样做你想做的事

val m = (Int.MaxValue /: x)(_ min _)

我将留给你阅读更多关于这些事情的内容(关于集合的min方法和折叠;注意这些并不像你写的那么快).

问题在于编译器会因为你的意思和写下划线时可能存在的有效类型而迷失方向,当你添加类型信息时,它认为你正试图在那里写一个函数并将其分配给米但当然m是一个Int,而不是一个函数,所以它抱怨.

只需明确写出来.它只有几个额外的字符:

x.foreach(i => m = m min i)

(编辑:李大同)

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

    推荐文章
      热点阅读