箭头镜头不允许我将可为空的属性设置为 null



给定这个(极其简化的)代码:

@optics
data class MigrationStatus(val token: String?)
val m = MigrationStatus(null)

我可以打电话

val m1 = MigrationStatus.token.modify(m) { "some token" }

但是由于参数类型是不可为空的String,我怎样才能token修改回null?答案是肯定的

val m2 = MigrationStatus.token.modify(m1) { null }

不编译。

尝试将其设置为Nonetoken类型更改为Option<String>时也会发生同样的情况,但我避免使用它,因为它现在已被弃用(我不确定我是否喜欢,但那是另一回事)。

我错过了一些明显的东西吗?

@Optics

编译器为该属性生成 2 个光学器件。

MigrationStatus.token&MigrationStatus.tokenNullableMigrationStatus.tokenOptionOption的情况下。

这是因为有两种不同的Optics在这里很有用。

  • Lens具有setget,在本例中为"Lens<MigrationStatus,String?>
  • Optional具有setgetOption,在本例中为"可选<迁移状态,字符串>

第一个是您要在这种情况下使用的那个 能够String?设置为null.

所以MigrationStatus.tokenNullable.set(null).

后者对于DSL和光学组合更有用,因为如果您没有String?另一个数据类或密封类,则仅在非空的情况下才希望对该值进行操作。

我希望这完全回答了你的问题!

相关内容

  • 没有找到相关文章

最新更新