Scala公共方法:';'预期但发现'def'
Posted
技术标签:
【中文标题】Scala公共方法:\';\'预期但发现\'def\'【英文标题】:Scala public methods: ';' expected but 'def' foundScala公共方法:';'预期但发现'def' 【发布时间】:2011-09-08 00:22:40 【问题描述】:我写了这个方法:
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] ^
这段代码有什么问题?
【问题讨论】:
【参考方案1】:public
不是 Scala 中的保留字,因此它将其解释为变量名。公共访问是默认设置;离开public
,你会没事的。
【讨论】:
【参考方案2】:方法默认是公开的。删除public
。
【讨论】:
谢谢!我认为这是可选的,现在我发现它根本不允许。【参考方案3】:只是把上面的答案加起来:
您也可以删除return
关键字。函数/方法中的最后一条语句/表达式自动成为返回值。
【讨论】:
【参考方案4】:问题在于您编写了 Java 代码。
除了public
,您还使用[]
对集合进行索引访问(这是无效的)、显式返回类型(不需要)、return
(这也是' t 需要)和.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
【讨论】:
+1 用于彻底校对。samplesContainer(0).length.toDouble
没什么问题,不过,这取决于 samplesContainer
是什么——我猜是一个数组,而且我不会在数组惯用语上调用 head
。
由于未指定,我在这里假设一个数组是失职的,因此必须考虑索引可访问集合类型的最普遍可能性。 Seq
在这种情况下。以上是关于Scala公共方法:';'预期但发现'def'的主要内容,如果未能解决你的问题,请参考以下文章
CompletableFuture 没有被执行。如果我使用 ExecutorService 池,它可以按预期工作,但不能使用默认的 forkJoin 公共池