与给定操作绑定的Scala和类型

与给定操作绑定的Scala和类型,scala,Scala,是否可以在方法中定义一个参数x,使得x的类型是实现给定函数签名的泛型类型T(比如def apply():Double),而不引入新类型 [示例]目标是定义如下内容(我使用特殊语法只是为了说明): def foo(x:T带def apply():Double)={…} 目前,我可以引入一个新类型ApplyDouble,但这需要我将所有可能的类型(其实例是合法参数)扩展为“foo”,然后foo的签名将转换为 def-foo(x:ApplyDouble)={…}当然,可以使用结构类型,您甚至几乎可以正

是否可以在方法中定义一个参数x,使得x的类型是实现给定函数签名的泛型类型
T
(比如
def apply():Double
),而不引入新类型

[示例]目标是定义如下内容(我使用特殊语法只是为了说明):

def foo(x:T带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
或:

foo
的定义将向您发出有关反射访问的警告,您可以通过添加导入或编译器选项(如警告消息中所述)来避免该警告


请注意,在结构类型上调用方法会带来一些开销,因此,如果在一个紧密的内部循环中需要这种方法,您可能需要重新考虑一下您的方法。不过,在大多数情况下,这可能不会产生明显的影响。

谢谢。这正是我想要的;)
scala> foo(new { def apply() = 42.0 })
res1: Double = 42.0