Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin Arrow lens赢得';t不允许我将可为null的属性设置为null_Kotlin_Functional Programming_Arrow Kt - Fatal编程技术网

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 }