【问题标题】:scala: how to define a value classscala:如何定义一个值类
【发布时间】:2016-02-18 09:48:41
【问题描述】:

关于如何在 scala 中定义值类的快速问题

这是典型的例子:

class Wrapper(val underlying: Int) extends AnyVal

我收到下一个错误:

/usr/home/User/scala2/scala_lerning/src3/val.scala:1: error: value class may not be a member of another class
class Wrapper(val underlying: Int) extends AnyVal
      ^
one error found

操作系统:FreeBSD 10.2 Scala 代码运行器版本 2.11.7 -- 版权所有 2002-2013,LAMP/EPFL

有人可以帮忙吗?

谢谢

【问题讨论】:

  • 错误信息看起来很明确,值类不能是内部类。
  • 对不起,对我来说仍然是悬而未决的问题。我正在从命令提示符编译它,例如: scala value.scala 。我应该在上面的示例中应用任何类修饰符吗?
  • 错误信息没有比这更清楚了...
  • 我应该为编译器指定任何选项吗?
  • 似乎与scala 命令加载文件的方式有关。使用 scalac 编译可以正常工作,只需在 REPL 中键入行或在其中使用 :load

标签: scala


【解决方案1】:

看来你在做

class Foo {
  class Wrapper(val underlying: Int) extends AnyVal
}

这是你做不到的。你必须这样做

class Foo {
}
class Wrapper(val underlying: Int) extends AnyVal

【讨论】:

  • 当我将您的代码放在一个文件中并尝试编译时,我遇到了同样的错误:scala file.scala.
  • 这里也是 scala 文档中的示例。它也失败了: trait Printable extends Any { def print(): Unit = println(this) } class Wrapper(val underlying: Int) extends AnyVal with Printable val w = new Wrapper(3) w.print() // 实际上需要实例化一个 Wrapper 实例
  • 那是因为您调用的是scala file.scala 而不是scalac file.scala。显然scala 将所有内容包装到一个顶级类中以启用脚本。
猜你喜欢
  • 2018-04-30
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 2012-03-13
相关资源
最近更新 更多