无法运行Scala脚本(jdegoes的fpmax)

时间:2019-03-18 21:38:13

标签: scala compilation scalac

这是J. A. De Goes的精彩网络演讲:https://www.youtube.com/watch?v=sxudIMiOo68-强烈建议对函数式编程感兴趣的每个人

这是随附的代码要点: https://gist.github.com/jdegoes/1b43f43e2d1e845201de853815ab3cb9

当我运行$ scalac fpmax.scala时,它将所有内容编译到一个新目录fpmax

但是当我运行scala App0时,它给了我错误:

Exception in thread "main" java.lang.NoClassDefFoundError: App0 (wrong name: fpmax/App0)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at scala.reflect.internal.util.ScalaClassLoader.$anonfun$tryClass$1(ScalaClassLoader.scala:45)
        at scala.util.control.Exception$Catch.$anonfun$opt$1(Exception.scala:242)
        at scala.util.control.Exception$Catch.apply(Exception.scala:224)
        at scala.util.control.Exception$Catch.opt(Exception.scala:242)
        at scala.reflect.internal.util.ScalaClassLoader.tryClass(ScalaClassLoader.scala:45)
        at scala.reflect.internal.util.ScalaClassLoader.tryToLoadClass(ScalaClassLoader.scala:39)
        at scala.reflect.internal.util.ScalaClassLoader.tryToLoadClass$(ScalaClassLoader.scala:39)
        at scala.reflect.internal.util.ScalaClassLoader$URLClassLoader.tryToLoadClass(ScalaClassLoader.scala:125)
        at scala.reflect.internal.util.ScalaClassLoader$.classExists(ScalaClassLoader.scala:150)
        at scala.tools.nsc.GenericRunnerCommand.guessHowToRun(GenericRunnerCommand.scala:36)
        at scala.tools.nsc.GenericRunnerCommand.<init>(GenericRunnerCommand.scala:55)
        at scala.tools.nsc.GenericRunnerCommand.<init>(GenericRunnerCommand.scala:18)
        at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:42)
        at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:101)
        at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)

我运行scala 2.12.6。

运行此代码段的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

我必须对其进行一些编辑才能运行App0。

  1. def main: Unit更改为def main(args: Array[String]): Unit,以便按照Scala规范使用args作为主要方法。
  2. 让我们编译它: scala fpmax.scala。实际上,这将创建包含所有类的fpmax目录
  3. 然后运行App0:
scala fpmax.App0                                                             5.50   ✔   12:21    19.03.19 
What is your name?
Alex
Hello, Alex, welcome to the game!
Dear Alex, please guess a number from 1 to 5:
4
You guessed wrong, Alex! The number was: 3
Do you want to continue, Alex?
n

请注意,我不会进入带有类的fpmax目录