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

scala – 使用列表中的参数调用函数

发布时间:2020-12-16 18:33:17 所属栏目:安全 来源:网络整理
导读:有没有办法用列表中的参数调用函数? Python中的等价物是sum(* args). // Scaladef sum(x: Int,y: Int) = x + yval args = List(1,4)sum.???(args) // equivalent to sum(1,4) sum(args:_ *)在这里不起作用. 不管怎样,不要提供改变功能的声明.我熟悉一个带
有没有办法用列表中的参数调用函数? Python中的等价物是sum(* args).

// Scala

def sum(x: Int,y: Int) = x + y
val args = List(1,4)

sum.???(args)      // equivalent to sum(1,4)

sum(args:_ *)在这里不起作用.
不管怎样,不要提供改变功能的声明.我熟悉一个带有重复参数def sum(args:Int *)的函数.

解决方法

好吧,你可以写

sum(args(0),args(1))

但我想你希望这适用于任何列表长度?然后你会去折叠或减少:

args.reduce(sum)  // args must be non empty!

(0 /: args)(sum)  // aka args.foldLeft(0)(sum)

这些方法假设列表成对减少.例如,foldLeft [B](init:B)(fun:(B,A)=> B):B将类型A的元素列表减少为类型B的单个元素.在此示例中,A = B = Int.它以初始值init开始.由于您想要求和,因此空列表的总和将为零.然后它使用当前累加器(运行总和)和列表的每个连续元素调用该函数.

所以它就像

var result = 0
result = sum(result,1)
result = sum(result,4)
...

reduce方法假定列表非空并且要求元素类型不会更改(函数必须从两个Int映射到Int).

(编辑:李大同)

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

    推荐文章
      热点阅读