【问题标题】:Is this Scala code correct?这个 Scala 代码正确吗?
【发布时间】:2011-06-26 20:13:32
【问题描述】:

为什么这段代码会使 Scala 2.8.1 编译器崩溃?

val a = new Array[{ var x = 1 }](3)

这是编译器的错误吗?

不管怎样,它是合法的 Scala 代码吗? (我想要一个匿名类类型的对象数组)

更新:

我想要的是这样的:

class X { var x = 1}
val a = new Array[X](3)

但不必定义独立的 X

【问题讨论】:

  • 当我不允许引用类时,我该如何准确地检查类?它甚至没有我可以声明要匹配的结构类型的方法。
  • 我绝不是专家,但由于编译器崩溃我会说这是一个错误。
  • 我不认为这是合法的 Scala,但编译器崩溃肯定是一个错误。

标签: scala scala-2.8


【解决方案1】:

编译器崩溃总是错误。但是你为什么要在 type 声明中设置 x 等于 1 呢?

您可能想要其中之一:

val a = new Array[{var x: Int}](3)
val a = Array.fill(3)(new { var x = 1 })

(编译器对其中任何一个都很满意)。

【讨论】:

  • 由于某种类型的递归,是否也存在诸如堆栈溢出之类的合法编译器崩溃?
  • @gruenewa - 允许在编译期间耗尽资源,是的,至少只要资源消耗在给定源代码的情况下是模糊合理的。
  • 谢谢雷克斯。后者正是我所需要的!
【解决方案2】:

它不会崩溃(Scala 2.8),所以它可能是一个错误。

【讨论】:

    猜你喜欢
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    相关资源
    最近更新 更多