如何解决斯卡拉 REPL首先它说“定义的非法开始”,然后是“错误:未找到:类型”,当我以不同的方式尝试时
抱歉,我知道在 Scala 论坛上经常有人问这些问题,但我已经尝试过关注这里的帖子,但无论哪种方式我都遇到了障碍,因此我非常感谢您提供的任何帮助请。
我在 Windows 命令行终端上使用 Scala REPL。我学习了 Jason Swartz 的“学习 Scala”并尝试了基本练习,效果很好。所以我尝试了“Scala Cookbook”的作者在这个网络博客上列出的投币 Scala 游戏(他的最终代码块从标题“完整源代码”开始): https://alvinalexander.com/scala/fp-book/functional-game-with-a-little-state/
我将两个代码块复制并粘贴到记事本中,并将这两个文件保存为 CoinFlipUtils.scala 和 coinflip.scala 并使用以下命令运行第一个:
scala CoinFlipUtils.scala
但是我收到了关于包的错误消息:
CoinFlipUtils.scala:1: error: illegal start of deFinition
package com.alvinalexander.coinflip.v1
所以我检查了 StackOverflow 网站,人们说改为使用 :paste -raw,然后将完整代码粘贴到粘贴模式以避免包错误消息。所以我使用 CoinFlipUtils 代码做到了这一点,但现在我收到了这些错误消息:
// Exiting paste mode,Now interpreting.
def printGameState(printableFlipResult: String,gameState: GameState): Unit = {
^
def printGameState(gameState: GameState): Unit = {
^
<pastie>:22: error: not found: type GameState
def getUserinput(): String = readLine.trim.toupperCase
^
<pastie>:10: warning: Auto-application to `()` is deprecated. Supply the empty argument list `()` explicitly to invoke method readLine,or remove the empty argument list from its deFinition (Java-defined methods are exempt).
In Scala 3,an unapplied method like this will be eta-expanded into a function.
There were compilation errors!
所以我不知道从哪里开始。博客文章中的代码是否已过时,或者我刚刚错误地设置了 Scala REPL?我就是不明白。教科书中的例子更容易,所以现在我很困惑试图让一个真正的程序工作。谢谢。
解决方法
关于如何更轻松地在 REPL 或脚本中输入一些任意代码,然后逐步迁移到工作表或独立代码,有一些票证或讨论。
这里描述的票是https://github.com/scala/bug/issues/4768,已经很旧了。
REPL 可能更多地用于较小的片段; Ammonite shell 用于更强大的脚本编写。
您可以预编译一些源:
$ scalac -d ab.jar a.scala b.scala
$ scala -classpath ab.jar c.scala
其中 a.scala
等具有任意来源,而 c.scala
具有“顶级脚本”语句。
或者,
scala -i a.scala -i b.scala
Welcome to Scala 2.13.5 (OpenJDK 64-Bit Server VM,Java 16.0.1).
Type in expressions for evaluation. Or try :help.
scala> new b.B(new a.A)
val res0: b.B = b.B@2349f14d
源文件有普通包的地方。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。