Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写参数类型函数,其中参数类在scala中声明了一些方法?_Scala_Polymorphism - Fatal编程技术网

如何编写参数类型函数,其中参数类在scala中声明了一些方法?

如何编写参数类型函数,其中参数类在scala中声明了一些方法?,scala,polymorphism,Scala,Polymorphism,我处理的Scala问题我不能正确命名,所以这里可能已经有答案了(请耐心等待) 假设此代码: class A {def foo() = 5} class B {def foo() = 6} def fooer[T](x:T) = x.foo() 我得到一个错误: <console>:7: error: value foo is not a member of type parameter T def fooer[T](x:T) = x.foo 但是没有成功问题是A.foo返

我处理的Scala问题我不能正确命名,所以这里可能已经有答案了(请耐心等待)

假设此代码:

class A {def foo() = 5}
class B {def foo() = 6}
def fooer[T](x:T) = x.foo()
我得到一个错误:

<console>:7: error: value foo is not a member of type parameter T
    def fooer[T](x:T) = x.foo

但是没有成功

问题是
A.foo
返回的是
Int
而不是
整数
。如果将方法更改为:

def fooer[T <: {def foo(): Int}](x:T) = x.foo()

def foore[T问题在于
A.foo
返回的是
Int
而不是
整数。如果将方法更改为:

def fooer[T <: {def foo(): Int}](x:T) = x.foo()

<代码> DEF Fooer-[t也可以简化为<代码> DEFFEER(x:{DEFBoo.):x.Foo.()/<代码>这是在引擎盖下使用反射的。但是没有C++样式模板和所有需要的代码生成,就没有办法避免它。您也可以简化为<代码> DEF Foever(x:{DEFHOPER):INT} = x.FoW()这是在引擎盖下使用反射。但是没有C++样式模板和所有代码生成都是无法避免的。李的答案很好地匹配了问题。虽然我建议你也可以查找ad-hoc多态性。李的答案很好地匹配了问题。虽然我建议你也查一下ad-hoc多态性。