求解这个 eval 函数返回值为什么是个 lambda?怎么才能拿到值? ​​​

2021-05-17 15:24:46 +08:00
 coderstory
   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 的操作 有什么区别

2154 次点击
所在节点    Kotlin
4 条回复
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)
}
}
yujincheng08
2021-05-17 15:36:48 +08:00
fun x() = blablabla 就是 fun x() { return blablabla } 的语法糖

你 fun x() = { xxx } 就是 fun x() { return () -> { xxx } }
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 }
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()

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/777439

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX