如何在Scala中的泛型选择器上指定所需函数

如何在Scala中的泛型选择器上指定所需函数,scala,generics,Scala,Generics,我知道这是可以做到的,但我一辈子都记不住(或找不到)语法。如何指定特定函数必须存在于函数定义中的泛型类型上 例如,我知道我可以做到: def blah[A](p: A) 我真正想要的是这样的东西(但我的语法当然全错了): 你要找的是所谓的“结构类型” 这里有任何例子: 然而,请注意,这将比仅仅声明一个要求任何参数实现该特性的特性要慢。您所寻找的被称为“结构类型” 这里有任何例子: 但是,请注意,这将比只声明一个要求任何参数实现该特性的特性要慢。我不确定使用它是否是一个好主意,但它是如何工作的:

我知道这是可以做到的,但我一辈子都记不住(或找不到)语法。如何指定特定函数必须存在于函数定义中的泛型类型上

例如,我知道我可以做到:

def blah[A](p: A)
我真正想要的是这样的东西(但我的语法当然全错了):


你要找的是所谓的“结构类型”

这里有任何例子:


然而,请注意,这将比仅仅声明一个要求任何参数实现该特性的
特性要慢。

您所寻找的被称为“结构类型”

这里有任何例子:


但是,请注意,这将比只声明一个要求任何参数实现该特性的
特性要慢。

我不确定使用它是否是一个好主意,但它是如何工作的:

def blah[A <: { def someFunction: String }](a: A) : Unit = 
    println(a.someFunction)

scala> class Test { def someFunction: String = "hello" }
defined class Test

scala> blah(new Test)
hello

scala> class Test2
defined class Test2

scala> blah(new Test2)
<console>:16: error: inferred type arguments [Test2] do not conform to method blah's type parameter bounds [A <: AnyRef{def someFunction: String}]
def blah[类测试{def someFunction:String=“hello”}
定义类测试
scala>blah(新测试)
你好
scala>class Test2
定义类Test2
scala>blah(新测试2)

:16:错误:推断的类型参数[Test2]不符合方法blah的类型参数边界[A我不确定使用此方法是否是一个好主意,但它的工作原理如下:

def blah[A <: { def someFunction: String }](a: A) : Unit = 
    println(a.someFunction)

scala> class Test { def someFunction: String = "hello" }
defined class Test

scala> blah(new Test)
hello

scala> class Test2
defined class Test2

scala> blah(new Test2)
<console>:16: error: inferred type arguments [Test2] do not conform to method blah's type parameter bounds [A <: AnyRef{def someFunction: String}]
def blah[类测试{def someFunction:String=“hello”}
定义类测试
scala>blah(新测试)
你好
scala>class Test2
定义类Test2
scala>blah(新测试2)
:16:错误:推断的类型参数[Test2]不符合方法blah的类型参数界限[A]
def blah[A <: { def someFunction: String }](a: A) : Unit = 
    println(a.someFunction)

scala> class Test { def someFunction: String = "hello" }
defined class Test

scala> blah(new Test)
hello

scala> class Test2
defined class Test2

scala> blah(new Test2)
<console>:16: error: inferred type arguments [Test2] do not conform to method blah's type parameter bounds [A <: AnyRef{def someFunction: String}]