首页 文章

Kotlin lambdas和类型推断

提问于
浏览
2

我在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>

But 我收到以下错误:

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

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

2 回答

  • 5

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

    使用普通括号应该可以做到这一点:

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

    将工作 . 您正在将函数传递给 filter ,不需要额外的lambda .

相关问题