ArrowKT - 镜头调用给出编译错误
ArrowKT - Lens invoke giving compilation error
我正尝试在 Arrow 中关注 this documentation 关于 Lens
的内容。但是当我尝试写一个 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
Arrow Optics 版本 0.10.0
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) }
)
我正尝试在 Arrow 中关注 this documentation 关于 Lens
的内容。但是当我尝试写一个 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
Arrow Optics 版本 0.10.0
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) }
)