将Java转换为Scala代码时的奇怪操作.在函数中返回一个新对象

Dre*_*w H 0 scala

我正在将一些旧的Java代码转换为Scala.我有这个.

    class XYCustomRenderer(dataMax: Double, dataMin: Double) extends XYShapeRenderer with BaseChart {

    override def getItemPaint(series: Int, item: Int): Paint = {

        val seriesCollection: TimeSeriesCollection = getPlot.getDataset(OUNCES_CHART).asInstanceOf[ TimeSeriesCollection ]

        val ounce = seriesCollection.getYValue(series, item)

        if ( ounce >= dataMax || ounce <= dataMin ) {
            new Color(255, 161, 15, 200)
        }

        new Color(242, 29, 5, 150)

    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个直接的转换.

我有问题让颜色正确返回.

如果我按照所示编写它,它总是返回底部颜色.

如果我这样写(带回程).

if ( ounce >= dataMax || ounce <= dataMin ) {
            return new Color(255, 161, 15, 200)
        }

        new Color(242, 29, 5, 150)
Run Code Online (Sandbox Code Playgroud)

它总是返回if块中的颜色.这对我没有任何意义.scala表现得某种我不确定的方式.

我只是想根据逻辑返回两种不同的颜色.我究竟做错了什么?

谢谢

agi*_*eel 8

if是Scala中的表达式.并隐式返回方法中的最后一个表达式.所以你要么写这个(注意else条款):

if ( ounce >= dataMax || ounce <= dataMin )
  new Color(255, 161, 15, 200)
else
  new Color(242, 29, 5, 150)
Run Code Online (Sandbox Code Playgroud)

或带有明确return声明的版本.