Kotlin lambda和类型推断

我在Kotlin中实现了以下枚举

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

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

 var test = playlists.filter { playlistActionType.playlistFilter} 

其中playlistActionType是PlaylistAction类型, PlaylistAction列表是List<Playlist>

我收到以下错误:

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

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

通过将谓词放在{} ,实际上是创建另一个返回谓词的lambda表达式,这就是为什么以(Playlist) -> (Playlist) -> Boolean而不是(Playlist) -> Boolean结尾的原因。

使用正常的括号应该做的诀窍:

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

将工作。 你传递一个函数来filter ,不需要额外的lambda。