Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala嵌套的case类生成奇怪的类型错误_Scala - Fatal编程技术网

scala嵌套的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类,它有一个属性引用另一个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 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版本中)