Подтвердить что ты не робот

Scala как писать, если еще

Я являюсь новым учеником scala, и я пытаюсь запустить этот пример кода

 def isLast(c: Int, r: Int):Int ={
   if(r == 1)
   {
   return 1;
   }

  else if (r == c){
   return 1
    }
   }

Но это дает мне ошибку времени компиляции, говоря

Multiple markers at this line
- type mismatch;  found   : Unit  required: Int
- type mismatch;  found   : Unit  required: Int

Пожалуйста, помогите мне, а также предложите мне хороший сайт для обучения scala.

4b9b3361

Ответ 1

Во-первых, немного очистите свой код:

def isLast(c: Int, r: Int):Int = {
  if(r == 1)
    return 1
  else if (r == c)
    return 1
  // but what about when r is neither 1 nor c ??
}

Итак, вы говорите scala, что если r равно 1, верните 1, а если r == c, верните 1. Это хорошо. Но если вы хотите, чтобы метод возвращал Int, он должен возвращать один в каждом случае. Поэтому scala жалуется, потому что не знает, какой Int вернется, когда r не является ни 1, ни c.

Исправление состоит в том, чтобы добавить предложение else, чем возвращает некоторый другой Int.

В качестве дополнительной заметки вы можете и должны оставить здесь ключевое слово return, позволяя scala неявно знать, что результат выражения if-else, как последнее выражение в теле функции, должен быть возвращен:

def isLast(c: Int, r: Int):Int = {
  if(r == 1)
    1
  else if (r == c)
    1
  else
    0 // or some other Int
}

В качестве окончательной заметки, если у вас есть функция, чье имя начинается с is, то она должна, вероятно, возвращать логическое значение. Другими словами, если последний является последним, верните true, иначе false.

Ответ 2

Я подозреваю, что вы пытаетесь вернуть 1 в качестве замены для true. Не; это не так.

Ваша логика такова:

def isLast(c: Int, r: Int): Boolean = r == 1 || r == c

Аннотация : Boolean не является обязательной. Здесь безопасно оставлять это, потому что это супер-очевидно, что тип возврата - из короткого выражения справа и вашего наименования метода. Не используйте 10 строк кода, когда 1 будет делать.

Ответ 3

У вас нет предложения "else", просто "else if", поэтому ваша функция не гарантирует возврата целого числа. Если он пройдет через оба условия, вы ничего не вернете, это тип возврата "Единица". Вы должны явно сказать else 0.