Kotlin lambdas与类型推断

Kotlin lambdas与类型推断,lambda,kotlin,type-inference,predicate,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} 其中playlactiontyp

我在Kotlin中实现了以下枚举

enum class PlaylistAction(val playlistFilter:(Playlist) -> Boolean) {
    PLAY ({ it.playListOwner.Id == "xxx" }),
    SAVE({true})
}
我想用它来过滤如下列表:

var test = playlists.filter { playlistActionType.playlistFilter}
其中playlactiontype为类型
playlaction
,playlists为
List

但是我得到以下错误:

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

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

var test = playlists.filter(playlistActionType.playlistFilter)
var test = playlists.filter(playlistActionType.playlistFilter)

会有用的。您正在将一个函数传递给
过滤器
,不需要额外的lambda

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

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