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)类型不匹配:推断类型是(播放列表) - >(播放列表) - >布尔但是(播放列表) - >布尔值是预期的
为什么推断类型(播放列表) - >(播放列表) - >布尔值而不是(播放列表) - >布尔值?
通过将你的谓词放入{}
,你实际上创建了另一个lambda,它返回你的谓词作为结果,这就是为什么你最终得到:(Playlist) -> (Playlist) -> Boolean
而不是(Playlist) -> Boolean
.
使用普通括号应该可以做到这一点:
var test = playlists.filter(playlistActionType.playlistFilter)
Run Code Online (Sandbox Code Playgroud)