Противоречивое предложение в сообщении об ошибке «список отсутствующих аргументов» для методов с несколькими списками аргументов? - PullRequest
0 голосов
/ 19 сентября 2018

Рассмотрим следующий фрагмент кода:

def foo(a: Int)(b: Int) = a + b
foo

Он не компилируется и выдает следующее сообщение об ошибке:

error: missing argument list for method foo
Unapplied methods are only converted to functions when 
  a function type is expected.
You can make this conversion explicit by writing 
`foo _` or `foo(_)(_)` instead of `foo`.

Подсказка foo _ работает.Но если я напишу выражение

foo(_)(_)

, как было предложено в предыдущем сообщении об ошибке, я получу новое сообщение об ошибке:

error: missing parameter type for expanded 
function ((x$1: <error>, x$2: <error>) => foo(x$1)(x$2))

Это кажется довольно нелогичным.

При каких обстоятельствах подсказка foo(_)(_) должна быть полезной, что именно она говорит мне ?

(шум удален; чем больше япродолжал редактировать вопрос, тем меньше смысла он имел; Колмар прав)

1 Ответ

0 голосов
/ 19 сентября 2018

Тип foo(_)(_) равен (Int, Int) => Int.Так что это работает, если вы указываете этот тип или используете его в контексте, который ожидает этот тип:

scala> foo(_: Int)(_: Int)
res1: (Int, Int) => Int = $$Lambda$1120/1321433666@798b36fd

scala> val f: (Int, Int) => Int = foo(_)(_)
f: (Int, Int) => Int = $$Lambda$1121/1281445260@2ae4c424

scala> def bar(f: (Int, Int) => Int): Int = f(10, 20)
bar: (f: (Int, Int) => Int)Int

scala> bar(foo(_)(_))
res2: Int = 30
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...