5

我写了这个方法:

public def getXScaleFactor(panelWidth: Int): Double = {
  return (panelWidth / (samplesContainer[0].length.asInstanceOf[Double]))
}

我在编译时遇到问题:

[error] ./src/main/scala/Controllers/TrackController.scala:85: ';' expected but 'def' found.
[error]   public def getXScaleFactor(panelWidth: Int): Double {
[error]          ^

这段代码有什么问题?

4

4 回答 4

24

public不是 Scala 中的保留字,因此将其解释为变量名。公共访问是默认设置;离开public,你会没事的。

于 2011-06-03T17:54:41.900 回答
5

默认情况下,方法是公共的。删除public.

于 2011-06-03T17:53:54.577 回答
4

只是为了添加上面的答案:

您也可以删除return关键字。函数/方法中的最后一条语句/表达式自动成为返回值。

于 2011-06-03T18:13:58.030 回答
4

问题是您已经编写了 Java 代码。

除了public,您还用于[]对集合的索引访问(无效)、显式返回类型(不需要)、return(也不需要)和.asInstanceOf(这是不必要的,以及代码气味)

试试这个以获得轻量级、更惯用的体验:

def xScaleFactor(panelWidth: Int) =
  panelWidth / samplesContainer.head.length.toDouble

或者如果samplesContainer可能为空:

def xScaleFactor(panelWidth: Int) =
  panelWidth / samplesContainer.headOption.map(_.length.toDouble).getOrElse(42.0)

42将您喜欢的任何内容代替默认设置

于 2011-06-03T18:17:02.930 回答