根据这个问题的答案,似乎在类型定义的一个组件之后放置"forSome"不同于将它放在整个事件的末尾.例如,似乎以下内容之间存在差异:
def one: Foo[U >: T] forSome {type U >: T}
def one: Foo[U forSome {type U >: T}]
Run Code Online (Sandbox Code Playgroud)
Scala语言规范似乎没有说明差异,我想象将量词转移到外部没有任何区别.如果它确实有所作为,我会认为它将如本答案所述,基本上说Set [X forSome {type X}]允许X在set元素之间变化,其中Set [X] forSome {type X}才不是.但是,这似乎不是整个故事和/或不正确,因为这不编译:
trait Bar {
def test: Set[X] forSome {type X}
}
def test(b: Bar) {
val set = b.test
val h = set.head
set.contains(h)
}
Run Code Online (Sandbox Code Playgroud)
但这样做:
trait Bar {
def test: Set[X forSome {type X}]
}
def test(b: Bar) {
val set = b.test
val h = set.head
set.contains(h) …Run Code Online (Sandbox Code Playgroud) 下面的代码没有编译,因为编译器无法证明v.o.Inner和Outer.this.Inner实现相同visit().我看不出如何告诉编译器v.o必须Outer.this使其在编译时得到认可.有任何想法吗?
class Outer {
class Inner {
def visit(v:Visitor) = v.visitInner(this)
}
}
class Visitor(val o:Outer) {
def visitInner(i:o.Inner) = { println("foo") }
}
Run Code Online (Sandbox Code Playgroud)