小编Sim*_*n K的帖子

在Scala泛型语法中放置"forSome"子句有什么重要意义?

根据这个问题的答案,似乎在类型定义的一个组件之后放置"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)

scala existential-type

5
推荐指数
1
解决办法
136
查看次数

如何约束参数类的成员以匹配外部类的实例?

下面的代码没有编译,因为编译器无法证明v.o.InnerOuter.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)

scala

4
推荐指数
1
解决办法
67
查看次数

标签 统计

scala ×2

existential-type ×1