加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala和类型绑定给定的操作

发布时间:2020-12-16 09:49:18 所属栏目:安全 来源:网络整理
导读:是否可以在方法中定义参数x,使得x的类型是实现给定函数签名的泛型类型T(让我们说def apply():Double),而不引入新类型? [示例]目标是定义类似的东西(我只是为了说明而使用adhoc语法): def foo(x:T with def apply():Double)= {…} 目前,我可以引入一个新
是否可以在方法中定义参数x,使得x的类型是实现给定函数签名的泛型类型T(让我们说def apply():Double),而不引入新类型?

[示例]目标是定义类似的东西(我只是为了说明而使用adhoc语法):

def foo(x:T with def apply():Double)= {…}

目前,我可以引入一个新类型的ApplyDouble,但这需要我将其实例为合法参数的所有可能类型扩展为’foo’,然后将foo的签名转换为

def foo(x:ApplyDouble)= {…}

解决方法

当然,结构类型是可能的,你甚至几乎得到了正确的语法:

def foo(x: { def apply(): Double }) = x.apply

然后:

scala> foo(() => 13.0)
res0: Double = 13.0

要么:

scala> foo(new { def apply() = 42.0 })
res1: Double = 42.0

foo的定义将为您提供有关反射访问的警告,您可以通过添加导入或编译器选项来避免这种情况(如警告消息中所述).

请注意,在结构类型上调用方法涉及一些开销,因此如果您需要在紧密的内部循环中进行此操作,您可能需要重新考虑一下您的方法.但在大多数情况下,它可能不会产生明显的差异.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读