scala嵌套的case类生成奇怪的类型错误
我正在尝试使用一个case类,它有一个属性引用另一个case类。但在某些情况下,我构造对象时会出现奇怪的类型错误 所以像这样的工作很好scala嵌套的case类生成奇怪的类型错误,scala,Scala,我正在尝试使用一个case类,它有一个属性引用另一个case类。但在某些情况下,我构造对象时会出现奇怪的类型错误 所以像这样的工作很好 case class Foo(a:Int) case class Bar(b:Foo, c:Foo) val t = Bar(Foo(1),Foo(2)) //t: Bar = Bar(Foo(1),Foo(2)) 当我将它嵌套到一个对象中时,似乎没有任何问题 object w { case class Foo(a:Int) case clas
case class Foo(a:Int)
case class Bar(b:Foo, c:Foo)
val t = Bar(Foo(1),Foo(2))
//t: Bar = Bar(Foo(1),Foo(2))
当我将它嵌套到一个对象中时,似乎没有任何问题
object w {
case class Foo(a:Int)
case class Bar(b:Foo, c:Foo)
}
我甚至可以创建一个对象
val t = w.Bar(w.Foo(1),w.Foo(2))
然而,当我试图从先前定义的Foo构造对象时,它会给我一个疯狂的类型错误
val f = w.Foo(1)
w.Bar(f,f)
// error: type mismatch;
// found : w.Foo
// required: w.Foo
// w.Bar(f,f)
有什么想法吗?Scala 2.10.5如果您在控制台上尝试它,同时重新定义一些类,就会发生这种情况。
如果在控制台中键入:
scala> :paste
// Entering paste mode (ctrl-D to finish)
case class Foo(a:Int)
case class Bar(b:Foo, c:Foo)
val t = Bar(Foo(1),Foo(2))
object w {
case class Foo(a:Int)
case class Bar(b:Foo, c:Foo)
}
// Exiting paste mode, now interpreting.
defined class Foo
defined class Bar
t: Bar = Bar(Foo(1),Foo(2))
defined module w
scala> val t = w.Bar(w.Foo(1),w.Foo(2))
t: w.Bar = Bar(Foo(1),Foo(2))
scala> val f = w.Foo(1)
f: w.Foo = Foo(1)
scala> w.Bar(f,f)
res1: w.Bar = Bar(Foo(1),Foo(1))
它会起作用的。但是,如果随后重新定义w对象,它将失败:
scala> object w {
| case class Foo(a:Int)
| case class Bar(b:Foo, c:Foo)
| }
defined module w
scala> w.Bar(f,f)
<console>:14: error: type mismatch;
found : w.Foo(in object w)(in object w)(in object w)(in object w)
required: w.Foo(in object w)(in object w)(in object w)(in object w)
w.Bar(f,f)
如果您在控制台上尝试,同时重新定义一些类,则可能会发生这种情况。
如果在控制台中键入:
scala> :paste
// Entering paste mode (ctrl-D to finish)
case class Foo(a:Int)
case class Bar(b:Foo, c:Foo)
val t = Bar(Foo(1),Foo(2))
object w {
case class Foo(a:Int)
case class Bar(b:Foo, c:Foo)
}
// Exiting paste mode, now interpreting.
defined class Foo
defined class Bar
t: Bar = Bar(Foo(1),Foo(2))
defined module w
scala> val t = w.Bar(w.Foo(1),w.Foo(2))
t: w.Bar = Bar(Foo(1),Foo(2))
scala> val f = w.Foo(1)
f: w.Foo = Foo(1)
scala> w.Bar(f,f)
res1: w.Bar = Bar(Foo(1),Foo(1))
它会起作用的。但是,如果随后重新定义w对象,它将失败:
scala> object w {
| case class Foo(a:Int)
| case class Bar(b:Foo, c:Foo)
| }
defined module w
scala> w.Bar(f,f)
<console>:14: error: type mismatch;
found : w.Foo(in object w)(in object w)(in object w)(in object w)
required: w.Foo(in object w)(in object w)(in object w)(in object w)
w.Bar(f,f)
在scala 2.11.7版本中,fineI无法复制(在scala 2.10.5版本中)在scala 2.11.7版本中,fineI无法复制(在scala 2.10.5版本中)