2013-01-03 2 views
5

У меня есть свободный метод побочных эффектов с аргументами по умолчанию, которые я хотел бы вызвать без круглых скобок, например .:Зачем нужны скобки для вызова методов с аргументами по умолчанию?

scala> def foo(x: Int = 1) = 42 
foo: (x: Int)Int 

scala> foo 
<console>:9: error: missing arguments for method foo in object $iw; 
follow this method with `_' if you want to treat it as a partially applied function 
       foo 
      ^

scala> foo() 
res3: Int = 42 

Является ли это преднамеренным или просто временное ограничение?

ответ

9

Это, вероятно, преднамеренное, так что вы не получаете блоки параметров исчезают на вас:

def foo(x: Int = 2)(y: Int = 4) = x*y 

foo(3) // What does this mean??? 
+0

я полагаю, но кажется, что в идеале в обычном случае (только один набор параметров), дополнительные круглые скобки будут позволил. –

+0

Хм, это не описано в [SID] (http://docs.scala-lang.org/sips/completed/named-and-default-arguments.html), возможно, оно может быть добавлено/закрыто? Я не проверял spec ... –

+5

В качестве обходного пути вы можете просто написать другой метод: 'def foo (x: Int = 1) = 42; def foo: Int = foo() ' –

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