你好,我有这个 scala 对象,我想使用带有 scala 的 shell 在 sample
函数中运行代码:
object SampleObject{
def sample(){
val data = Array(1, 2, 3, 4, 5)
data.foreach(println(_))
}
}
我做的是这个
scala> :load /Users/username/Desktop/Cli.scala
Loading /Users/username/Desktop/Cli.scala...
defined object SampleObject
但是如果我运行这个
scala> SampleObject.sample
这就是我要的
<console>:92: error: value sample is not a member of object SampleObject
SampleObject.sample
为什么会这样?命令 :load 和 -i 有问题,就像您无法访问对象成员一样。有什么建议可以让它发挥作用吗?
更新 1: 如果我运行上面的代码既不执行加载也不执行 -i 而是直接将其写入 shell 一切正常。
最佳答案
问题是大括号前的换行符。您可以通过以下两种方式之一解决此问题:
- 使用
:paste
而不是:load
- 把大括号和对象名放在同一行
您最初的问题是说 object SampleObject{
但事实证明这不是您的实际文件包含的内容,如您的更新 2 所示。由于 :load
逐行工作,就像您在 REPL 中键入一样,当解释器看到
object Cli时完成了:这是一个完全有效的、完整的 Scala 对象声明(不是很有趣)。下一行的左大括号将开始一个与您刚刚定义的对象无关的新 block 。
这是交互式 REPL 与编译器行为不同的区域,后者将允许在大括号前有一个换行符(有关详细信息,请参见 the Scala language specification)。
关于scala - 错误 : value is not a member of object using Scala on the shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43141598/