Kotlin Arrow lens赢得';t不允许我将可为null的属性设置为null
鉴于此(极其简化的)代码: 我可以打电话Kotlin Arrow lens赢得';t不允许我将可为null的属性设置为null,kotlin,functional-programming,arrow-kt,Kotlin,Functional Programming,Arrow Kt,鉴于此(极其简化的)代码: 我可以打电话 val m1 = MigrationStatus.token.modify(m) { "some token" } 但是,由于参数类型是不可为null的字符串,如何将标记修改回null?当然 val m2 = MigrationStatus.token.modify(m1) { null } 不编译 当尝试将标记类型更改为选项并将其设置为无时,也会发生同样的情况,但我现在避免了它(我不确定我是否喜欢,但那是另一回事) 我错过了一些
val m1 = MigrationStatus.token.modify(m) { "some token" }
但是,由于参数类型是不可为null的字符串
,如何将标记
修改回null
?当然
val m2 = MigrationStatus.token.modify(m1) { null }
不编译
当尝试将标记
类型更改为选项
并将其设置为无
时,也会发生同样的情况,但我现在避免了它(我不确定我是否喜欢,但那是另一回事)
我错过了一些明显的东西吗?编译器为该属性生成2个光学元件
MigrationStatus.token
和MigrationStatus.tokenNullable
或MigrationStatus.tokenOption
在选项
的情况下
这是因为这里有两种不同的光学元件
具有镜头
和设置
,在本例中为`镜头获取
具有Optional
&set
,在本例中为`可选getOption
String?
设置为null
所以MigrationStatus.tokenNullable.set(null)
后者对于DSL和光学元件的合成更为有用,因为如果您有另一个数据类或密封类,而不是String?
,则只希望在不为null的情况下对该值进行操作
我希望这能完全回答你的问题 编译器为该属性生成2个光学元件
MigrationStatus.token
和MigrationStatus.tokenNullable
或MigrationStatus.tokenOption
在选项
的情况下
这是因为这里有两种不同的光学元件
具有镜头
和设置
,在本例中为`镜头获取
具有Optional
&set
,在本例中为`可选getOption
String?
设置为null
所以MigrationStatus.tokenNullable.set(null)
后者对于DSL和光学元件的合成更为有用,因为如果您有另一个数据类或密封类,而不是String?
,则只希望在不为null的情况下对该值进行操作
我希望这能完全回答你的问题
val m2 = MigrationStatus.token.modify(m1) { null }