gpt4 book ai didi

scala - 如何在 Scala 中为表达式注释表达式类型

转载 作者:行者123 更新时间:2023-12-01 11:38:52 24 4
gpt4 key购买 nike

我想知道如何(安全地)将类型归属添加到 Scala 表达式的左侧。

在处理复杂的 for 表达式时,推断的类型通常难以理解,或者可能偏离轨道,最好在 for {..} block 中注释表达式,以检查你和编译器同意。使用 Eff monad 的说明性代码草图:

for {
e1: Option[(Int, Vector[Int])] <- complexCalc
e2 <- process(e1)
} yield e2

def complexCalc[E]: Eff[E, Option[(Int, Vector[Int])]] = ???

但是,这与 Scala 对 for 表达式的 LHS 模式匹配的支持相冲突。

最终结果是添加类型归属使得 LHS 模式看起来可以反驳并且需要在 RHS 上定义 filter 操作。一个症状是编译器错误,例如 value filter is not a member of org.atnos.eff.Eff[E,Option[(Int, Vector[Int])]]

是否有任何句法形式可用于将类型归于包含元组的中间表达式,在 for 表达式中,而不会遇到可反驳的模式匹配?

最佳答案

事实证明,在这个 Scalaz PR 中对这个问题和当前最佳解决方案进行了广泛的讨论。 *。

解决方法是在下面一行的分配中添加类型归属:

for {
e <- complexCalc
e1: Option[(Int, Vector[Int])] = e
e2 <- process(e1)
} yield e2

def complexCalc[E]: Eff[E, Option[(Int, Vector[Int])]] = ???

关于scala - 如何在 Scala 中为表达式注释表达式类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37982029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com