Как использовать условные операторы при переопределении toString

#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"