2013-08-14 3 views
1

Интересно, почему это не работает:Опуская скобку для метода с одним параметром

object test { 
    def method1(a: Int) = println(a) // println a -- doesn't work either 

    method1 123 
} 

method1 принимает только параметр, то есть, это может быть возможно опустить скобки, не так ли?

+0

Это уже ответили здесь: http://stackoverflow.com/questions/1181533/what-are-the-precise-rules-for-when-you-can-omit-parenthesis-dots-braces -f –

ответ

2

Это конфликт с постфиксной операцией. Давайте посмотрим на ваш пример:

println a 

Анализатор будет интерпретировать это как

println.a 

Было бы очень запутанным, если вы могли бы написать

println 123 

(который различим, так как 123 не является допустимым именем метода), но теперь, если вы замените 123 переменной, удерживающей значение, вы получите что-то вроде member a not found on println.

+0

Почему 'startWith' work 'val map2 = Map (1 ->" 1 ", 2 ->" 2 ") filter {kv => kv._1 начинается с буквы" A "}'? –

+0

@MariusKavansky это инфикс. то же самое: 'kv._1.startsWith (" A ")' – gzm0

+0

Почему это не то же самое, что 'kv._1.startsWith."? потому что println a такой же, как println.a –

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