Scala 斯卡拉:“我的朋友。”;切勿使用return语句“;但是
我对Scala还很陌生,仍在努力适应它。(我主要来自爪哇) 我有一个关于我们不应该使用return语句的约定/规则的问题 我有一个函数可以创建一个LabeledPoint对象。最后一行创建标签点。它不是一个表达式,因此编译器认为应该返回前一行代码(作为一个单元运行)。然而,函数签名当然是返回LabeledPoint,因此编译错误 如果我添加一个return语句,一切正常 代码如下:Scala 斯卡拉:“我的朋友。”;切勿使用return语句“;但是,scala,Scala,我对Scala还很陌生,仍在努力适应它。(我主要来自爪哇) 我有一个关于我们不应该使用return语句的约定/规则的问题 我有一个函数可以创建一个LabeledPoint对象。最后一行创建标签点。它不是一个表达式,因此编译器认为应该返回前一行代码(作为一个单元运行)。然而,函数签名当然是返回LabeledPoint,因此编译错误 如果我添加一个return语句,一切正常 代码如下: @throws(classOf[Exception]) private def convertRowToLabel
@throws(classOf[Exception])
private def convertRowToLabeledPoint(rowIn: Row, fieldNameSeq: Seq[String], label:Int)
: LabeledPoint =
{
try
{
val values: Map[String, Integer] = rowIn.getValuesMap(fieldNameSeq)
val sortedValuesMap = ListMap(values.toSeq.sortBy(_._1): _*)
//println(s"convertRowToLabeledPoint row values ${sortedValuesMap}")
print(".")
val rowValuesItr: Iterable[Integer] = sortedValuesMap.values
var positionsArray: ArrayBuffer[Int] = ArrayBuffer[Int]()
var valuesArray: ArrayBuffer[Double] = ArrayBuffer[Double]()
var currentPosition: Int = 0
rowValuesItr.foreach
{
kv =>
if (kv > 0)
{
valuesArray += kv.doubleValue();
positionsArray += currentPosition;
}
currentPosition = currentPosition + 1;
}
val lp:LabeledPoint = new LabeledPoint(label, org.apache.spark.mllib.linalg.Vectors.sparse(positionsArray.size,positionsArray.toArray, valuesArray.toArray))
return lp
}
catch
{
case ex: Exception =>
{
throw new Exception(ex)
}
}
}
那么,我该如何关闭Java大脑并重塑(或打破)这个功能呢?
或者在此处使用return可以吗?替换
val lp:LabeledPoint = new LabeledPoint(label, org.apache.spark.mllib.linalg.Vectors.sparse(positionsArray.size,positionsArray.toArray, valuesArray.toArray))
return lp
与
最后一个表达式是函数的返回值。replace
val lp:LabeledPoint = new LabeledPoint(label, org.apache.spark.mllib.linalg.Vectors.sparse(positionsArray.size,positionsArray.toArray, valuesArray.toArray))
return lp
与
最后一个表达式是函数的返回值。最后一行应该是
new LabeledPoint(label, org.apache.spark.mllib.linalg.Vectors.sparse(positionsArray.size,positionsArray.toArray, valuesArray.toArray))
这就够了
val lp:LabeledPoint=new LabeledPoint(..)
是赋值语句,因此编译器仍然希望返回类型最后一行应该是
new LabeledPoint(label, org.apache.spark.mllib.linalg.Vectors.sparse(positionsArray.size,positionsArray.toArray, valuesArray.toArray))
这就够了
val lp:LabeledPoint=new LabeledPoint(..)
是赋值语句,因此编译器仍然需要返回类型,或者,如果需要lp
变量,例如用于调试
val lp = ...
lp
或者,如果您想要
lp
变量,例如用于调试
val lp = ...
lp