#scala #conditional-operator
#scala #условный оператор
Вопрос:
Я пытаюсь переопределить toString с помощью условных операторов. Но я получаю сообщение об ошибке, в котором говорится о несоответствии типов. Предполагается, что он имеет строковый тип, и прямо сейчас он имеет любой тип. noGoals, Tied — это функции, которые возвращают true или false .
override def toString = {
if (this.noGoals)
s"${this.home} vs. ${this.away} at ${this.location}: no goals"
else if (this.Tied)
s"${this.home} vs. ${this.away} at ${this.location}: tied"
}
Комментарии:
1. Не имеет прямого отношения к делу, но мне не нравится вводить поведенческую логику
toString()
. Предполагается, что он представляет удобочитаемое представление объекта, не реализующее много логики. Возможно, лучше использовать другой метод для отображения информации пользователю.2. Подсказка: какую строку вы возвращаете, когда оба эти условия являются ложными?
Ответ №1:
Выражение
if (conditionA) "aa"
else if (conditionB) "bb"
по умолчанию
if (conditionA) "aa"
else if (conditionB) "bb"
else () // oops () types to Unit
где значение ()
имеет Unit
тип, в то время как значения "aa"
и "bb"
имеют тип String
, а наименьшая верхняя граница Unit
и String
равна Any
. Таким образом, попробуйте предоставить строку по умолчанию для последней ветви else следующим образом
if (conditionA) "aa"
else if (conditionB) "bb"
else "default"