对于调用以下构造函数:
class SparkContext(
val master: String,
val appName: String,
val sparkHome: String = null,
val jars: Seq[String] = Nil,
val environment: Map[String, String] = Map())
extends Logging {
在以下通知中,最后一个参数被注释掉:
val spark = new SparkContext("localhost", "GroupBy Test",
System.getenv("SPARK_HOME"), Seq(System.getenv("SPARK_EXAMPLES_JAR")) /* , Map() */)
然后 scala 编译器(2.9.2)提示:
not enough arguments for constructor SparkContext: (master: String, appName: String, sparkHome: String, jars: Seq[String], environment: scala.collection.Map[String,String])spark.SparkContext
val spark = new SparkContext("localhost", "GroupBy Test",
^
当它被取消注释时,代码就会编译。那么..AFA 省略最后一个参数(而 scala 使用默认值)有什么问题?
请注意,我使用的是 2.9.3
最佳答案
当我尝试使用 Scala 编译器的一个主要版本(第一个 + 第二个数字)和库的不同版本(例如2.9 编译器与 2.10 编译的库。不幸的是,Scala 编译的库在 2.8、2.9 或 2.10 之间不兼容,也不在 2.8 的不同次要版本(第三个数字不同)之间兼容。换句话说,所有 Scala 库以及代码本身都必须使用相同的主要版本进行编译,对于 2.8.x,也必须使用相同的次要版本进行编译。从 2.10 开始的次要版本之间确实存在二进制兼容性,并且在大多数情况下与 2.9 之间存在二进制兼容性,尽管 2.9 系列中存在一些边缘情况。
关于scala - 在 scala 中省略具有默认值的参数时获取 "incorrect number of arguments",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20940942/