2011-12-08 66 views
4

我需要限制Scala方法参数,以便它实现特征和结构子类型。我怎样才能做到这一点?将类限制为Scala中的特征和结构子类型

trait Foo 
// ... 
def someMethod[A <: Foo xxx { def close() }](resource: A)(block: A => Unit) { 
    // ... 
} 

如何替换xxx?我尝试了extendswith,但得到语法错误。

可以使用type定义结构亚型吗?

回答

6

实际上,我不知道,如果这与Tenshi所建议的是一样的东西,但它编译,所以试试吧......

def someMethod[A <: Foo { def close() }](resource: A)(block: A => Unit) { 
    // ... 
} 
+0

我正在用tenshi的解决方案,因为它允许多个特质:'A <:Foo with Bar with CanBeClosed',但感谢您的回答。当我只有一个特征时,我可以使用这个语法。 – Ralph

+1

'[A <:Foo with Bar {def close()}]'不管信不信,这就好了;) – agilesteel

相关问题