lambda - Kotlin lambda 和类型推断

标签 lambda kotlin type-inference predicate

我在 Kotlin 中实现了以下枚举

enum class PlaylistAction(val playlistFilter:(Playlist) -> Boolean) {
    PLAY ({ it.playListOwner.Id == "xxx" }),
    SAVE({true})
}

我想用它来过滤这样的列表:

var test = playlists.filter { playlistActionType.playlistFilter}

其中 playlistActionType 的类型为 PlaylistAction播放列表是List<Playlist>

但是我收到以下错误:

Error:(122, 34) Type mismatch: inferred type is (Playlist) -> (Playlist) -> Boolean but (Playlist) -> Boolean was expected

为什么推断类型是 (Playlist) -> (Playlist) -> Boolean 而不是 (Playlist) -> Boolean?

最佳答案

通过将谓词放入 {} 中,您实际上是在创建另一个返回谓词结果的 lambda,这就是为什么您最终会得到:(Playlist) -> (Playlist ) -> bool 值 而不是 (播放列表) -> bool 值

使用普通括号应该可以解决问题:

var test = playlists.filter(playlistActionType.playlistFilter)

关于lambda - Kotlin lambda 和类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40642529/

相关文章:

c++ - 无法将 std::set_intersection 应用于具有公共(public)字段的不同类型的结构

c# - 为列表 c# 中的特定索引应用 lambda 表达式

c# - 动态表达式不适用于动态对象

json - Kotlin json解析where "val $t: String"

java - 为什么这个分支会中断类型推断?

c++ - 在新指针的构造函数中传递的 Lambda 函数需要访问该对象

android - 如何将 Kotlin 日期中的字符串或时间戳格式化为我的首选格式?

android - 监听器绑定(bind);找不到二传手

haskell - 为什么 Haskell 变量在被模式匹配绑定(bind)时不是多态的?

f# - 为什么 F# 推断我的函数实现了 IComparable?