2016-11-16 36 views
2

我采取了以下枚举在科特林科特林lambda表达式和类型推断

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

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

回答

5

通过将谓词放在{}中,实际上是创建另一个返回谓词的lambda表达式,因此最终得到的结果是:(Playlist) -> (Playlist) -> Boolean而不是(Playlist) -> Boolean

用方括号应该做的伎俩:

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

将工作。您正在向filter传递函数,因此不需要额外的lambda。