
class Min { override fun eval(variables: Map<String, Any>): Any = { val values = parameters.map { i.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 fun x() = blablabla 就是 fun x() { return blablabla } 的语法糖 你 fun x() = { xxx } 就是 fun x() { return () -> { xxx } } |
3 AoEiuV020 2021-05-17 15:41:49 +08:00 如果能改成链式调用的话可以考虑用=, 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() |