我有这个代码:
for( i <- 0 to 8){
((numbers(i) - i)/3).abs + ((numbers(i) - i)%3).abs
}
Run Code Online (Sandbox Code Playgroud)
正如标题所说,我想这样做
for( i <- 0 to 8){
by3(numbers(i), i, /) + by3(numbers(i), i, %)
}
def by3(a: Int, b: Int, op: Int => Int) = ((a - b) op 3).abs
Run Code Online (Sandbox Code Playgroud)
并且可能还使用部分应用的功能..但到现在这可能实现?怎么样?
maa*_*asg 18
首先,您需要正确定义op为函数(具体来说,a Function2)
def operate(a: Int, b: Int, op: (Int, Int) => Int ) : Int = (op ((a - b), 3)).abs
Scala中的运算符实际上是方法:+是Scala OO基础中的Int(和Long,Double,...)方法.然后,要将操作符(方法)作为函数传递,可以使用下划线表示法提升它:
operate(5, 3, _ + _)
Kar*_*arl 10
要删除下划线,您需要将函数定义为值.
val / = (a:Int, b: Int) => a / b
val % = (a:Int, b: Int) => a % b
def by3(a: Int, b: Int, fn: (Int, Int) => Int): Int = fn(a - b, 3).abs
(0 to 8).foreach(i => by3(numbers(i), i, /) + by3(numbers(i), i, %))
Run Code Online (Sandbox Code Playgroud)
编辑/更新:
简洁,最简单的方法是:
def doStuff(a: Int, b: Int, op: (Int, Int) => Int) = {op(a - b, 3).abs}
doStuff(4,1,_%_)
所以你可以 doStuff(numbers(i), i, _ / _) + doStuff(numbers(i), i, _ % _)
| 归档时间: |
|
| 查看次数: |
4383 次 |
| 最近记录: |