scala - 错误 : value is not a member of object using Scala on the shell

标签 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 有问题,就像您无法访问对象成员一样。有什么建议可以让它发挥作用吗?

更新 1: 如果我运行上面的代码既不执行加载也不执行 -i 而是直接将其写入 shell 一切正常。

更新 2: 还是行不通... enter image description here

最佳答案

问题是大括号前的换行符。您可以通过以下两种方式之一解决此问题:

  1. 使用 :paste 而不是 :load
  2. 把大括号和对象名放在同一行

您最初的问题是说 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/

相关文章:

join - Spark 2.0.0错误: PartitioningCollection requires all of its partitionings have the same numPartitions

scala - 列表和集合的区别

php - 在Centos5.11上编译PHP5.6.24

linux - 如何在 logrotate.conf 中重启服务

shell - 自动输入shell密码的方法?

scala - Spark Streaming StreamingContext.start() - 启动接收器时出错 0

hadoop - AWS EMR 如何调整大小

scala - 根据另一个 RDD 的第一个字段的值检索现有 RDD 的第二个字段的值

scala - 如何在 IntelliJ IDEA 11 Community Edition 中创建 SBT Run 配置?

scala - 如何折叠 Scala 迭代器并获得延迟计算的序列作为结果?