【发布时间】:2017-09-24 14:48:58
【问题描述】:
我试图找到一种简洁的方法将两个数组的压缩结果传递到一个映射函数中,即。一种不需要同时声明输入变量并在 lambda 中使用粗箭头的方法。
这甚至可能是不可能的,但我想我会在放弃之前问一下。
第一个示例是打印两个数组元素相加结果的工作代码。 zip 的 lambda 必须先声明 x 和 y,然后才能使用它们。
第二个例子是非编译代码,它说明了我想使用“_”或类似的东西来为压缩输入提供更好的转换函数可用性。
示例 1
object Example extends App {
val numbers1: Array[Int] = Array(1,2,3,4,5)
val numbers2: Array[Int] = Array(9,8,7,6,5)
val result = (numbers1, numbers2).zipped.map( (x,y) => sum(x,y) )
result.foreach( println(_) )
def sum(x: Int, y: Int): Int = {
x+y
}
}
当转换函数具有像“sum”这样的短名称并且输入数组是基元时,这很好,但是当传入包含转换所需的几个成员变量作为参数的包装对象数组时,事情会变得更加冗长。
是否有允许这样的语法糖:?
示例 2
object Example extends App {
val numbers1: Array[Int] = Array(1,2,3,4,5)
val numbers2: Array[Int] = Array(9,8,7,6,5)
val result = (numbers1, numbers2).zipped.map( sum(_) )
result.foreach( println(_) )
def sum( inputTuple: (Int, Int) ): Int = {
val x = inputTuple._1
val y = inputTuple._2
x + y
}
}
我越详细,我就越觉得我已经把自己写成了代码味道,所以如果这是答案,请说出来,我会从另一个方向解决问题。
【问题讨论】:
-
您可能正在寻找Arrow typeclass
标签: scala