2016-11-16 82 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。