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。