Kotlin lambdas和类型推断

Whe*_*der 2 lambda type-inference predicate kotlin

我在Kotlin中实现了以下枚举

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

我想用它来过滤这样的List:

var test = playlists.filter { playlistActionType.playlistFilter}
Run Code Online (Sandbox Code Playgroud)

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

我收到以下错误:

错误:(122,34)类型不匹配:推断类型是(播放列表) - >(播放列表) - >布尔但是(播放列表) - >布尔值是预期的

为什么推断类型(播放列表) - >(播放列表) - >布尔值而不是(播放列表) - >布尔值?

Grz*_*rek 5

通过将你的谓词放入{},你实际上创建了另一个lambda,它返回你的谓词作为结果,这就是为什么你最终得到:(Playlist) -> (Playlist) -> Boolean而不是(Playlist) -> Boolean.

使用普通括号应该可以做到这一点:

var test = playlists.filter(playlistActionType.playlistFilter)
Run Code Online (Sandbox Code Playgroud)