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的定义将为您提供有关反射访问的警告,您可以通过添加导入或编译器选项来避免这种情况(如警告消息中所述). 请注意,在结构类型上调用方法涉及一些开销,因此如果您需要在紧密的内部循环中进行此操作,您可能需要重新考虑一下您的方法.但在大多数情况下,它可能不会产生明显的差异. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |