gpt4 book ai didi

Kotlin:将运算符作为函数参数传递

转载 作者:IT老高 更新时间:2023-10-28 13:44:56 25 4
gpt4 key购买 nike

我在 Kotlin 中有以下功能

fun evaluate(first:Int?, second:Int?) {
var result = 0
if (v.equals('*')) {
result = (first ?: 0) * (second ?: 0)
} else if (v.equals('+')) {
result = (first ?: 0) + (second ?: 0)
} else if (v.equals('-')) {
result = (first ?: 0) - (second ?: 0)
} else if (v.equals('/')) {
result = (first ?: 0) / (second ?: 0)
}
return result
}

我想以某种方式对其进行更改,以便我可以将所需运算符作为第三个参数传递并评估表达式。类似的东西

fun evaluate(first:Int?, second:Int?, op: () -> Unit):Int {
return (first ?: 0).op(second ?: 0)
}

在这种情况下,如何将运算符作为函数传递?我查了同一种question ,但目前尚不清楚如何使用运算符来做到这一点。

最佳答案

写一个 higher order function使用 function type作为参数允许使用内置运算符和lambda expressions用于操作,所以这看起来像:

fun evaluate(first: Int?, second: Int?, op: (Int, Int) -> Int): Int {
return op(first ?: 0, second ?: 0)
}

可以使用内置运算符调用,例如:

val r1 = evaluate(value1, value2, Int::times) 
val r2 = evaluate(value1, value2, Int::plus)
val r3 = evaluate(value1, value2, Int::minus)
val r4 = evaluate(value1, value2, Int::div)

还有自定义函数:

val r5 = evaluate(value1, value2) { a, b -> (a * a) + b }

现在您还可以将运算符分配给变量,例如您 v:

val v: (Int, Int)->Int = Int::times  // typing needed on left to avoid ambiguous alternatives
// and then later...
val r6 = evaluate(value1, value2, v)

请注意,为签名 Int.(Int)->Int 编写的函数可以传递到期望 (Int, Int)->Int 的参数中,因为接收方this 将作为第一个参数传入。

关于Kotlin:将运算符作为函数参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39469158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com