我正在使用库函数,该函数使用参数minPartitions的默认参数值。我有一个包装函数,我可以从中调用这个库函数。我希望我的包装函数工作的方式是 - 如果为minPartitions传递了一个值,我将在调用该函数时使用该值。否则,我将使用默认值而不传递参数。我如何在Scala中执行此操作?
def read(foo: String, minPartitions: Integer = ????): RDD[String] = {
val rdd = sc.hadoopRDD(jobConf,
classOf[InputFormat],
classOf[BytesWritable],
classOf[BytesWritable],
minPartitions // optional - default value will be used
)
}
答案 0 :(得分:0)
您有几种选择:
如果您有自己的逻辑默认值,或者我不关心默认值是否会在将来的某个时间点发生变化,那么我会使用选项1,否则使用选项2。
答案 1 :(得分:0)
对于可能不存在的值,Scala具有let checkstr = str => {
let matches = str.match(/[\DA-Z]+/g);
return matches
? Math.max.apply(Math
, matches.map(match => /[A-Z]/.test(match) ? match.length : -1))
: -1
};
console.log(checkstr("a0Ba"), checkstr("a0bb"), checkstr("aa0aaBa"));
的概念。
Option
可以是Option[Int]
或Some[Int]
。您可以在包装函数中使用它。
此外......使用Scala时,除非明确要求,否则请使用None
代替Int
。
现在......一种方法是使用模式匹配
Integer
另一个是def read(foo: String, partitionsOpt: Option[Int]): RDD[String] = {
partitionsOpt match {
case Some(partitions) => sc.hadoopRDD(
jobConf,
classOf[InputFormat],
classOf[BytesWritable],
classOf[BytesWritable],
partitions
)
case None => sc.hadoopRDD(
jobConf,
classOf[InputFormat],
classOf[BytesWritable],
classOf[BytesWritable]
)
}
map
,然后执行Option
getOrElse
答案 2 :(得分:0)
示例功能:
//you can directly define your default in the parameter list
def read(minPartitions: Integer = 123): Unit {
println(minPartitions)
}
read(77) //prints out 77
read() //prints out 123
或者,您可以使用另一个答案中提到的Option / Some / None。
示例功能:
//in this function, you must provide an Option value to second parameter
def read(minPartitions: Option[Int]): Unit {
println(minPartitions.getOrElse(123))
}
read(Some(77)) //prints out 77
read(None) //prints out 123
您也可以将这两个概念结合使用(将参数类型定义为选项并在参数列表中提供默认值)
希望这有帮助! :)