Scala路径依赖返回类型来自参数

时间:2012-06-19 22:29:41

标签: scala parameters path-dependent-type

在下面的代码中使用Eclipse插件2.1.0中的2.10.0M3 for 2.10M3。我正在使用针对JVM 1.5的默认设置

class GeomBase[T <: DTypes] {          
  abstract class NewObjs {
    def newHex(gridR: GridBase, coodI: Cood): gridR.HexRT          
  }

  class GridBase {
    selfGrid =>
      type HexRT = HexG with T#HexTr

    def uniformRect (init: NewObjs) {
      val hexCood = Cood(2 ,2)
      val hex: HexRT = init.newHex(selfGrid, hexCood)//  won't compile
    }
  }
}

错误讯息:

Description Resource Path Location Type type mismatch;
  found: GeomBase.this.GridBase#HexG with T#HexTr
  required: GridBase.this.HexRT (which expands to) GridBase.this.HexG with T#HexTr GeomBase.scala   

为什么编译器认为该方法返回类型投影GridBase#HexG时应该是GridBase的这个特定实例?

编辑转移到更简单的代码类,以响应现在收到不同错误消息的评论。

package rStrat
class TestClass {
  abstract class NewObjs {
    def newHex(gridR: GridBase): gridR.HexG
  }     
  class GridBase {
    selfGrid =>         

    def uniformRect (init: NewObjs) {
      val hex: HexG = init.newHex(this) //error here                        
    }       

    class HexG {
      val test12 = 5                 
    }
  }
}

Error line 11:Description   Resource    Path    Location    Type
type mismatch;  found   : gridR.HexG  required: GridBase.this.HexG
possible cause: missing arguments for method or constructor TestClass.scala /SStrat/src/rStrat  line 11 Scala Problem

更新我已经切换到2.10.0M4并在新版本的Eclipse上将插件更新为M4版本并切换到JVM 1.6(和1.7),但问题没有改变。

2 个答案:

答案 0 :(得分:4)

记录为SI-5958 - 将其替换为依赖方法类型

答案 1 :(得分:2)

现在从2.10.0M7起作用。该错误已得到修复。

val hex: HexRT = init.newHex(selfGrid, hexCood) //now compiles and runs correctly