Публичные методы Scala: ';' ожидается, но 'def' найден - PullRequest
4 голосов
/ 03 июня 2011

Я написал этот метод:

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 ]

23 голосов
/ 03 июня 2011

public не является зарезервированным словом в Scala, поэтому оно интерпретируется как имя переменной.Публичный доступ по умолчанию;просто перестань public и все будет хорошо.

4 голосов
/ 03 июня 2011

Проблема в том, что вы написали код 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 там

4 голосов
/ 03 июня 2011

Просто добавьте ответы на вопросы:

Вы также можете удалить ключевое слово returnПоследнее выражение / выражение в функции / методе автоматически является возвращаемым значением.

4 голосов
/ 03 июня 2011

Методы общедоступны по умолчанию.Удалить public.

...