微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

斯卡拉 REPL首先它说“定义的非法开始”,然后是“错误:未找到:类型”,当我以不同的方式尝试时

如何解决斯卡拉 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 举报,一经查实,本站将立刻删除。