错误:值不是在shell上使用Scala的对象的成员

时间:2017-03-31 13:11:34

标签: scala shell apache-spark rdd

您好我有这个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,就像你无法访问对象成员一样。有什么建议让它起作用吗?

UPDATE1: 如果我运行上面的代码既不执行加载也不运行-i,而是直接在shell上编写,一切正常。

UPDATE2: 还是行不通... enter image description here

1 个答案:

答案 0 :(得分:3)

问题是支撑前的换行符。您可以通过以下两种方式解决此问题:

  1. 使用:paste代替:load
  2. 将大括号放在与对象名称相同的行上

您的原始问题是object SampleObject{,但事实证明,这不是您的实际文件所包含的内容,正如您的更新2所示。由于:load逐行工作,就像你在REPL上输入一样,当翻译人员看到

object Cli
它完成时:这是完全有效的,完整的Scala声明一个(不是非常有趣)的对象。下一行的左括号将开始一个与您刚刚定义的对象无关的新块。

这是一个交互式REPL与编译器行为不同的区域,它允许在大括号之前有一个换行符(详见the Scala language specification)。