【问题标题】:Scala -- not a member of packageScala——不是包的成员
【发布时间】:2013-12-03 13:01:10
【问题描述】:

我正在学习 Scala,如果这是一个愚蠢的问题,请耐心等待。

我有这个包和一个类(把它拆成最简单的版本):

package Foo {
  class Bar {}
}

然后在main.scala 文件中我有:

import Foo.Bar

object test {
  def main() {
    val b = new Bar()
  }
}

为什么会这样:

test.scala:1: 错误:Bar 不是 Foo 的成员

它指向import 语句。

【问题讨论】:

  • 你是如何编译这个的?您使用的是 sbt 或 maven 还是了解包结构的东西?
  • scala 命令不编译程序,它运行一个程序。我建议查看sbt,或者,如果它是一个非常简单的应用程序,只需将所有内容放在一个文件中。
  • 有没有办法在 Intellij IDEA 中轻松做到这一点?

标签: scala


【解决方案1】:

scalac 是 scala 编译器。 Foo.bar 需要编译后才能使用,所以不能只将 main.scala 作为脚本运行。

你代码中的另一个错误是main方法需要是

def main(args: Array[String]) {  ...

(或者您可以改用test extends App 并取消main 方法)。

我可以确认您是否将上面的两个文件放在一个空目录中(在主方法签名上进行了更正)并运行scalac *,然后运行scala test,它运行正常。

【讨论】:

  • 我得到了error: source file 'Foo' could not be found 单独运行scalac *
  • @rFactor note 我说的是“在一个空目录中”。如果您还有其他文件,则需要将其专门指向 *.scala 文件
【解决方案2】:

最可能的解释是你没有编译第一个文件,或者你在编译时做错了什么。假设两个文件都在当前目录中,那么这应该可以工作:

scalac *.scala

它应该在当前目录中生成一些类文件,并在Foo 目录中生成一个Bar.class 文件,它将创建。

【讨论】:

  • 我得到 error: source file 'Foo' could not be found 单独运行 scalac *
  • 是否有一种明智的方法来重新编译每个已更改的文件,然后使用 Intellij IDEA 之类的工具运行我想要的单个文件?
  • @rFactor 那是scalac *.scala——你不想将非scala文件传递给它。至于 IDEA,我假设如果你清理项目就会发生这种情况。
【解决方案3】:

要在 IntelliJ 中快速测试 scala 代码(使用 Scala plugin),您只需键入 Ctrl+Shift+F10

请注意,为了测试 Scala 类,您还有其他选择,IntelliJ 也支持:

【讨论】:

  • 我没有键盘快捷键——你指的是运行“Scala 控制台”吗?顺便说一句,我没有投反对票。
  • @rFactor 您需要在 IntelliJ 中安装 Scala 插件,才能使用该功能。而且它仅用于解释几行 Scala,这可能不是您想要做的。
  • 我已经安装并配置了插件,我可以运行“Scala Console”,在这种情况下它只会打开 Scala REPL...你指的是什么键盘快捷键?
  • 好的,我将键盘设置改回默认设置,现在可以使用它了。
  • @rFactor 很高兴你成功了(我刚下班回来,现在才看到你的消息)
猜你喜欢
  • 1970-01-01
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 2016-02-09
  • 2021-03-31
  • 2019-09-24
  • 1970-01-01
相关资源
最近更新 更多