2016-07-14 4 views
0

Я довольно новичок в scala и пытался попробовать несколько простых вещей. Я создал функцию, которая выглядит примерно так:Как вернуть значение из функции scala?

private def checkValu() : Option[Integer] = { 
    if(!list.isEmpty()){ 
     for(value <-list){ 
      val x = list.get(0) 
     } 
    } 
    return (x) 
    } 

я называю функцию, чтобы вернуть значение x.I доступа к значению списка и хотят вернуть первое значение в списке. Но почему-то это не работает. Это дает мне ошибку говоря

"not found value x". 

Я также пытался делать без «возврата» даного, но это дает мне ошибки на если и петли говоря

"type mismatch; found : Unit required: Option[Integer]" 

Что я здесь отсутствует? Могли бы сумбодии, пожалуйста, помогите мне здесь.

Заранее спасибо.

+4

http://www.tutorialspoint.com/scala/ – Dima

+3

Это не JavaScript. Объем x - это блок, в котором он находится, а не содержащая функция. –

+3

Почему это проголосовали 4 раза? Это, очевидно, кто-то, кто: а) пытается б) новый для языка и с) на правильном веб-сайте, чтобы получить помощь. Нет ничего воспалительного, и пример содержит код. – wheaties

ответ

3

Я предполагаю, что вы ищете что-то вроде этого:

def checkValue() : Option[Integer] = { 
    if(!list.isEmpty()) {//Assuming list is java.util.List[Integer] and want the last value 
     return Some(list.get(list.size() - 1)) 
    } 
    None 
} 

Это решение использует java.util.List<Integer>, я предполагаю, что вы использовали, что для list. None просто возвращается, если значения не присутствуют, в противном случае, последний, хотя я не был уверен, что это ваше намерение, в случае, если вы хотите, чтобы первая: return Some(list.get(0))

Более идиоматическое решение:

def checkValue() : Option[Integer] = { 
    if(!list.isEmpty()) {//Assuming list is java.util.List[Integer] and first value is required 
     Some(list.get(0)) 
    } else { 
     None 
    } 
} 

I было неуверено, какое значение вы хотели бы вернуть, потому что вам нужно было перебрать весь список (именование метода тоже не помогло). Вероятно, @cmbaxter был прав, и вы хотели первого.

Только некоторые заметки об ошибках: во-первых: вы имели в виду переменную x, которая была вне области видимости (вне понимания), поэтому это был не лучший выбор. Второй, вероятно, был вызван из-за заявления if без остального, что приводит к Unit. Поскольку это остается единственным выражением, которое пыталось вернуть, хотя это не было Option[Integer].

+0

Я не думаю, что OP ищет последний элемент (который может быть легко удовлетворен 'lastOption'), поскольку они продолжают получать 0-й индекс каждый раз, когда цикл проходит через список. Я думаю, что они хотят 'headOption' – cmbaxter

+0

@cmbaxter Я думаю, что OP использует' java.util.List', поэтому нет 'lastOption' или' headOption', если нет неявного преобразования, хотя я думаю, что это будет более запутанным для ее его. –

+0

Хорошая точка, вероятно, как видно из вызова '.get' – cmbaxter

2

Не будет ли проще:

def checkValue(): Option[Int] = list.headOption 
// assuming list is List[Int] and you want to return option of the first element 
Смежные вопросы