我需要限制Scala方法参数,以便它实现特征和结构子类型。我怎样才能做到这一点?将类限制为Scala中的特征和结构子类型
trait Foo
// ...
def someMethod[A <: Foo xxx { def close() }](resource: A)(block: A => Unit) {
// ...
}
如何替换xxx
?我尝试了extends
和with
,但得到语法错误。
可以使用type
定义结构亚型吗?
我需要限制Scala方法参数,以便它实现特征和结构子类型。我怎样才能做到这一点?将类限制为Scala中的特征和结构子类型
trait Foo
// ...
def someMethod[A <: Foo xxx { def close() }](resource: A)(block: A => Unit) {
// ...
}
如何替换xxx
?我尝试了extends
和with
,但得到语法错误。
可以使用type
定义结构亚型吗?
是的,你可以使用type
此:
type CanBeClosed = {def close()}
def someMethod[A <: Foo with CanBeClosed](resource: A)(block: A => Unit) {
// ...
}
最近,我也写了类似的主题帖子:
http://hacking-scala.posterous.com/composing-your-types-on-fly
实际上,我不知道,如果这与Tenshi所建议的是一样的东西,但它编译,所以试试吧......
def someMethod[A <: Foo { def close() }](resource: A)(block: A => Unit) {
// ...
}
我正在用tenshi的解决方案,因为它允许多个特质:'A <:Foo with Bar with CanBeClosed',但感谢您的回答。当我只有一个特征时,我可以使用这个语法。 – Ralph
'[A <:Foo with Bar {def close()}]'不管信不信,这就好了;) – agilesteel