0

我正在尝试遵循有关Arrow 的文档。Lens但是,当我尝试编写镜头时

data class Player(val health: Int)

val playerLens: Lens<Player, Int> = Lens(
    get = { player -> player.health },
    set = { player, value -> player.copy(health = value) }
)

我收到以下错误:

4 type arguments expected for operator fun <S, T, A, B> invoke(): PLens<S, T, A, B>

我看到这Lens<S, T>是 的类型别名PLens<S, S, T, T>,那么为什么会出现这个编译错误?

Kotlin 版本 1.3.50

艾睿光学 0.10.0 版

4

1 回答 1

1

Kotlin typealias 在这里无法按预期工作。调用构造函数时,需要在此处指定 4 个参数:

Lens<Player, Player, String, String>(
        get = { v -> v.health },
        set = { v, value -> player.copy(health = value)  }
    )

我们根本没有指定它们,编译器可以从 lambda 参数类型中为您推断出它们

Lens(
        get = { player: Player -> player.health },
        set = { player: Player, value: Int -> player.copy(health = value) }
    )
于 2019-10-07T13:58:28.463 回答