首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有泛型参数的函数中的结构类型

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

Stack Overflow用户
提问于 2014-02-12 18:21:54
回答 1查看 310关注 0票数 0

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

下面是一个简单的例子:

代码语言:javascript
运行
复制
def reverse[A](xs: { def reverse(): A }): A = xs.reverse

这不带错误地编译,但在传递定义reverse函数的类型时失败,其错误如下:

代码语言:javascript
运行
复制
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容器中也会出现同样的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-12 18:37:15

这对我来说很管用:

代码语言:javascript
运行
复制
def getReverse[A](xs: {def reverse: A}): A = xs.reverse

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

显然,在没有括号的结构类型中定义reverse是可行的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21736375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档