Kotlin lambda 和类型推断

Kotlin lambdas and type inference

我在 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?

var test = playlists.filter(playlistActionType.playlistFilter)

会起作用。您将一个函数传递给 filter,不需要额外的 lambda。

通过将谓词放在 {} 中,您实际上是在创建另一个 lambda,结果是 returns 您的谓词,这就是为什么您最终得到:(Playlist) -> (Playlist) -> Boolean 而不是 (Playlist) -> Boolean.

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

var test = playlists.filter(playlistActionType.playlistFilter)