2016-06-13 2 views
1
for (i <- 0 to 1; c <- 0 until str.length) { 
    print(c + i).toChar 
} 

for (i <- 0 to 1; c <- 0 until str.length) yield (str(c) + i).toChar 

Когда я запускаю первый фрагмент кода выше, я получаю сообщение об ошибке: value toChar is not a member of Unit. Но когда я запускаю второй фрагмент кода с выходом, ошибка исчезает.toChar не является Единицей

Является ли это потому, что statement print(c+i) в block statement в первом фрагменте кода возвращает значение Unit и Unit тип данных не имеет функцию под названием toChar? Мне сложно понять, когда что-то возвращает Unit в block statement в Скале.

ответ

2

Это происходит потому, что <fn>() - оператор-функция вызова имеет более высокий приоритет, <obj>.<field/method> - поле или метод доступа, поэтому Scala считает, что вы хотите позвонить print(c + i) => Unit затем Unit.toChar

+0

Ох, что имеет смысл. Мне было глупо не понимать, что ... Наверное, я был так застрял в попытке поиграть с синтаксисом :). Спасибо! – LP45

2

print функция возвращает Unit, так:

print(c + i).toChar 

пытается найти способ toChar для Unit (который не существует).

Вы должны сделать это внутри печать:

print((c + i).toChar) 
# equivalently 
print(c + i toChar) 
+0

Каково значение этого в круглых скобках? Как он заставляет его возвращать значение? Я исхожу из фона java и C++, и некоторые вещи в Scala я не могу понять ... – LP45

+1

Это * точно * то же, что и в Java и C++. В первом случае вы вызываете 'toChar' на возвращаемое значение' print' (которое возвращает 'Unit', что в основном является значением, которое означает отсутствие значимого возвращаемого значения ... IOW, в Java,' print' будет метод 'void', который вообще ничего не возвращает, но в Scala каждый метод возвращает что-то, поэтому' print' возвращает то, что говорит «Я ничего не возвращаю»). Во втором случае вы вызываете 'toChar' на результат' c + i', а затем 'print' возвращаемое значение' toChar'. Это не относится к Scala, так оно работает на всех языках. –

+0

'(c + i) .toChar' - это не то же самое, что' c + i toChar' – sschaef

Смежные вопросы