#scala #methods #compilation #function #public-method
#scala #методы #Сборник #функция #общедоступный метод
Вопрос:
Я написал этот метод:
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
.
Комментарии:
1. Спасибо! Я думал, что это необязательно, теперь я вижу, что это вообще не разрешено.
Ответ №3:
Просто в дополнение к ответам выше:
Вы также можете удалить return
ключевое слово. Последний оператор / выражение в функции / методе автоматически является возвращаемым значением.
Ответ №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
Комментарии:
1. 1 за тщательную вычитку. В
samplesContainer(0).length.toDouble
этом нет ничего плохого, хотя, в зависимости от того, чтоsamplesContainer
такое — массив, я предполагаю, и я бы не назвал использованиеhead
для массива идиоматичным.2. Поскольку я не указан, я бы неосторожно предположил, что здесь используется массив, и поэтому должен рассмотреть наиболее общую возможность для типа коллекции, доступного для индекса.
Seq
в данном случае.