class Min {
override fun eval(variables: Map<String, Any>): Any = {
val values = parameters.map { it.eval(variables) }
min(values[0] as Double, values[1] as Double)
}
}
这个函数啊在 IDEA 的 evaluate 中执行 返回了 Min$eval$1 类的实例 ()-> Kotlin.Double
override fun eval(variables: Map<String, Any>): Any {
val values = parameters.map { it.eval(variables) }
return min(values[0] as Double, values[1] as Double)
}
我把它改成了普通的 return 函数就没这个问题了 可以返回具体的值
求解这种直接等于号赋值的操作 和普通函数使用 return 的操作 有什么区别
1
AoEiuV020 2021-05-17 15:35:28 +08:00
前者=相当于返回=后面的东西,{}花括号包起来那就是个 lambda 了,
override fun eval(variables: Map<String, Any>): Any { return { val values = parameters.map { it.eval(variables) } min(values[0] as Double, values[1] as Double) } } |
2
yujincheng08 2021-05-17 15:36:48 +08:00 1
fun x() = blablabla 就是 fun x() { return blablabla } 的语法糖
你 fun x() = { xxx } 就是 fun x() { return () -> { xxx } } |
3
AoEiuV020 2021-05-17 15:41:49 +08:00 1
如果能改成链式调用的话可以考虑用=,
override fun eval(variables: Map<String, Any>): Any = parameters.subList(0, 2).minBy { it.eval(variables) as Double } |
4
AoEiuV020 2021-05-17 15:43:21 +08:00
不对,不该 minBy,
override fun eval(variables: Map<String, Any>): Any = parameters.subList(0, 2).map { it.eval(variables) as Double }.min() |