可选择Kotlin箭头透镜

可选择Kotlin箭头透镜,kotlin,Kotlin,我正在尝试将Arrow optics用于一个带有选项字段的类。以下代码可以正常工作: @optics data class TestClass(val opt: String) { companion object } val tc = TestClass("Hello") val tc2 = TestClass.opt.set(tc, "def") 但以下代码(外观类似)没有: @optics data class TestClass(val opt: Option<String&g

我正在尝试将Arrow optics用于一个带有
选项
字段的类。以下代码可以正常工作:

@optics
data class TestClass(val opt: String) { companion object }

val tc = TestClass("Hello")
val tc2 = TestClass.opt.set(tc, "def")
但以下代码(外观类似)没有:

@optics
data class TestClass(val opt: Option<String>) { companion object }

val tc = TestClass(Some("Hello"))
val tc2 = TestClass.opt.set(tc, None)
@光学
数据类TestClass(val opt:Option){companion object}
val tc=TestClass(有些(“你好”))
val tc2=TestClass.opt.set(tc,无)
看起来最后一个
集合
需要的是
字符串
,而不是
选项
。如何使用镜头清除
可选


(我意识到在这种情况下,我可以只使用
copy()
甚至手动复制,但我有一个类似类被深度嵌套的真实情况)。

我找到了解决方案:
@optics
还将生成一个
optionFieldName
镜头,例如

@optics
data class TestClass(val opt: Option<String>) { companion object }

val tc = TestClass(Some("Hello"))
val tc2 = TestClass.optionOpt.set(tc, None)
@光学
数据类TestClass(val opt:Option){companion object}
val tc=TestClass(有些(“你好”))
val tc2=TestClass.optionOpt.set(tc,无)