gpt4 book ai didi

scala - 关于 Scala 中(递归)结构类型的有趣观察

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

我需要在某些代码中使用一些递归结构类型,使用特征和结构类型作为类型参数约束。它运行得很好,但后来我了解到 Scala 不支持递归结构类型。

有人可以解释一下为什么它工作得很好吗:

scala> trait Test[M[A] <: { def map[B](f: A => B) : M[B] } ] {}
defined trait Test

这不是:

scala> def test[M[A] <: { def map[B](f: A => B) : M[B] } ] = null
<console>:5: error: illegal cyclic reference involving type M
def test[M[A] <: { def map[B](f: A => B) : M[B] } ] = null

最佳答案

我认为这是编译器中的一个故障。以下代码与您的初始代码表现出相同的行为:

trait Test[M[A] <: { def map: M[A] } ] {}
def test[M[A] <: { def map: M[A] } ] = null

它会导致编译时错误:“非法循环引用”。

下面的代码则不会(即它可以正常编译):

type S[M] = { def map: M }

trait Test[M[A] <: S[M[A]] ] {}
def test[M[A] <: S[M[A]] ] = null

唯一的区别是结构类型是通过类型别名 S 来应用的。

关于scala - 关于 Scala 中(递归)结构类型的有趣观察,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3643699/

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