我需要限制Scala方法参数,以便它实现特征和结构子类型.我怎样才能做到这一点?
trait Foo
// ...
def someMethod[A <: Foo xxx { def close() }](resource: A)(block: A => Unit) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
我该代替xxx什么?我都尝试extends和with,但有语法错误.
可以使用type结构子类型的定义来完成吗?
是的,您可以使用type此:
type CanBeClosed = {def close()}
def someMethod[A <: Foo with CanBeClosed](resource: A)(block: A => Unit) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
最近我也写了类似主题的帖子:
http://hacking-scala.posterous.com/composing-your-types-on-fly
我实际上不确定,如果这与tenshi建议的相同,但它编译,所以试试看......
def someMethod[A <: Foo { def close() }](resource: A)(block: A => Unit) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
416 次 |
| 最近记录: |