我在 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?
最佳答案
通过将谓词放入 {}
中,您实际上是在创建另一个返回谓词结果的 lambda,这就是为什么您最终会得到:(Playlist) -> (Playlist ) -> bool 值
而不是 (播放列表) -> bool 值
。
使用普通括号应该可以解决问题:
var test = playlists.filter(playlistActionType.playlistFilter)
关于lambda - Kotlin lambda 和类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40642529/