Kotlin lambdas和类型推断

时间:2016-11-16 21:18:41

标签: lambda kotlin type-inference predicate

我在Kotlin中实现了以下枚举

enum class PlaylistAction(val playlistFilter:(Playlist) -> Boolean) {
    PLAY ({ it.playListOwner.Id == "xxx" }),
    SAVE({true})
}

我想用它过滤像这样的List:

var test = playlists.filter { playlistActionType.playlistFilter}

其中playlistActionType的类型为PlaylistAction,播放列表为List<Playlist>

但是我收到以下错误:

  

错误:(122,34)类型不匹配:推断类型是(播放列表) - &gt; (播放列表) - &gt;布尔但是(播放列表) - &gt;布尔是预期的

为何推断类型(播放列表) - &gt; (播放列表) - &gt;布尔而非(播放列表) - &gt;布尔?

2 个答案:

答案 0 :(得分:5)

通过将谓词放在{}中,您实际上是在创建另一个返回谓词的lambda,这就是为什么您最终得到:(Playlist) -> (Playlist) -> Boolean而不是(Playlist) -> Boolean。< / p>

使用普通括号应该可以解决问题:

var test = playlists.filter(playlistActionType.playlistFilter)

答案 1 :(得分:0)

var test = playlists.filter(playlistActionType.playlistFilter)

会奏效。您将函数传递给filter,不需要额外的lambda。