Странное действие при конвертации Java в код Scala. Возврат нового объекта в функцию - PullRequest
0 голосов
/ 20 декабря 2011

Я конвертирую старый 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)

    }
}

Это прямое преобразование в значительной степени.

У меня проблемы с получением правильного цвета.

Если я напишу его, как показано, он всегда возвращает нижний цвет.

Если я напишу это так (с возвратом).

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

        new Color(242, 29, 5, 150)

Всегда возвращает цвет в блоке if. Это не имеет никакого смысла для меня. Скала ведет себя определенным образом, в котором я не уверен.

Я просто пытаюсь вернуть два разных цвета на основе логики. Что я делаю неправильно?

Спасибо

Ответы [ 2 ]

8 голосов
/ 20 декабря 2011

if - это выражение в Scala.И последнее выражение в методе возвращается неявно.Таким образом, вы должны написать это (обратите внимание на предложение else):

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

или версию с явным оператором return.

0 голосов
/ 20 декабря 2011

Вы пытались войти (или использовать отладчик), чтобы увидеть фактические значения унции, dataMax и dataMin?

Какой тип возвращен seriesCollection.getYValue (series, item)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...