繁体   English   中英

具有泛型类型参数的函数中的结构类型

[英]Structural type in function with generic type parameter

在Scala中进行实验时,我经常发现自己想要为定义foo所有类型定义一个函数。 对于简单的情况,我可以使用结构类型进行此操作,但是当需要类型参数时它会分崩离析。

这是一个简单的例子:

def reverse[A](xs: { def reverse(): A }): A = xs.reverse

这编译没有错误,但在传递定义reverse函数的类型时失败,并出现以下错误:

scala> reverse("string")
<console>:13: error: type mismatch;
 found   : String("adsf")
 required: AnyRef{def reverse(): ?}
              reverse("adsf")
                      ^

我也尝试在类型参数[A <: { def reverse(): A }]上定义结构边界,但得到相同类型的结果。 看起来我可能是这里类型擦除的受害者(看到它期望reverse的结果是? )。

我不确定Scala的类型系统中是否存在这种类型约束,或者我是否遗漏了某些东西。 有没有办法为具有泛型参数的函数定义结构类型?


注意:我简要地认为我在给定示例中的问题是reverse实际上是在StringOps定义的,而不是字符串。 不幸的是,将我的字符串包装在StringOps容器中会出现同样的问题。

这对我有用:

def getReverse[A](xs: {def reverse: A}): A = xs.reverse

scala> getReverse("1234")
res10: scala.collection.immutable.WrappedString = 4321

显然在没有括号的结构类型中定义reverse

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM