从任意类型的Kotlin arrow中提取值并将其分配给const

从任意类型的Kotlin arrow中提取值并将其分配给const,kotlin,arrow-kt,Kotlin,Arrow Kt,这将是一个基本问题,但我想不出解决办法。我需要从右边的值中初始化一个常量,该值低于任何一种类型 val test: Either<String, Int> = 1.right() 我希望它的作用域在when语句之外。有没有办法做到这一点,或者箭头不是为此目的而设计的?重要的问题是:如果两个箭头中的任何一个都没有,会发生什么。在本例中,它是在使用它的地方附近创建的,因此作为一名开发人员,您很清楚这一点。但是对于编译器来说,其中的内容可以是Int或字符串 您可以使用例如折叠来提取值:

这将是一个基本问题,但我想不出解决办法。我需要从右边的值中初始化一个常量,该值低于任何一种类型

val test: Either<String, Int> = 1.right()

我希望它的作用域在when语句之外。有没有办法做到这一点,或者箭头不是为此目的而设计的?

重要的问题是:如果两个箭头中的任何一个都没有,会发生什么。在本例中,它是在使用它的地方附近创建的,因此作为一名开发人员,您很清楚这一点。但是对于编译器来说,其中的内容可以是Int或字符串

您可以使用例如折叠来提取值:

val x = test.fold({ 0 }, {it}) // provide 0 as default in case the Either was a `Left`
// x = 1
另一个选择是getOrElse

也可以在不展开的情况下使用它:

val test = 1.right()
val testPlus10 = test.map { it + 10 } // adds 10 to `test` if it is `Right`, does nothing otherwise
val x = testPlus10.getOrElse { 0 } // unwrap by providing a default value
// x = 11
有关更多示例,请查看


推荐阅读:

重要的问题是:如果两个选项中的任何一个被保留,会发生什么。在本例中,它是在使用它的地方附近创建的,因此作为一名开发人员,您很清楚这一点。但是对于编译器来说,其中的内容可以是Int或字符串

您可以使用例如折叠来提取值:

val x = test.fold({ 0 }, {it}) // provide 0 as default in case the Either was a `Left`
// x = 1
另一个选择是getOrElse

也可以在不展开的情况下使用它:

val test = 1.right()
val testPlus10 = test.map { it + 10 } // adds 10 to `test` if it is `Right`, does nothing otherwise
val x = testPlus10.getOrElse { 0 } // unwrap by providing a default value
// x = 11
有关更多示例,请查看


推荐阅读:

如果保留值,应该得到什么?无效的当用作陈述时使用。@Nicolas编辑了我的问题。如果我使用when作为表达式,那么无论是get gonnabe Int还是String,我都会遇到同样的问题,然后kotlin选择任意astype@Vencat在FP中,或者表示两个分支都可能的代码分支。摆脱左分支的唯一方法是在这种情况下提供与右分支类型相同的值。看看LordRaydenMk对此的回答。但这并不是一种方便的工作方式。相反,在FP中,您要做的是将其保持为一个或,并使用组合符(如map、flatMap等)在顶部组合程序操作,如LordRaydenMk所示。这些都是对幸福案例的操作。然后,在某个时刻,通过调用fold并在左侧处理错误,插入一个错误处理策略。若值为Left,那个么应该得到什么?无效的当用作陈述时使用。@Nicolas编辑了我的问题。如果我使用when作为表达式,那么无论是get gonnabe Int还是String,我都会遇到同样的问题,然后kotlin选择任意astype@Vencat在FP中,或者表示两个分支都可能的代码分支。摆脱左分支的唯一方法是在这种情况下提供与右分支类型相同的值。看看LordRaydenMk对此的回答。但这并不是一种方便的工作方式。相反,在FP中,您要做的是将其保持为一个或,并使用组合符(如map、flatMap等)在顶部组合程序操作,如LordRaydenMk所示。这些都是对幸福案例的操作。然后在某个时刻,通过调用fold并在左侧处理错误,插入错误处理策略。这是一个非常准确的答案。推荐的方法是最后一种方法,将其作为一个任选项,并在其顶部进行堆栈操作,在某个点插入一个折叠以处理两侧。这是一个非常准确的答案。推荐的方法是最后一种方法,将其作为一个任选项,并在其顶部进行堆栈操作,在某个点插入一个折叠以处理两侧。有关使用以下任一方法处理错误的其他信息: