2015-04-20 4 views
1

Учитывая следующий метод:Применение метода с Implicits Частично

scala> def f(x: Int)(implicit y: Int, z: Int) = x + y + z 
f: (x: Int)(implicit y: Int, implicit z: Int)Int 

я могу определить неявное, а затем применить его.

scala> implicit val x: Int = 5 
x: Int = 5 

scala> f(10) 
res0: Int = 20 

Но, видимо, я не могу указать только один неявный аргумент:

scala> f(10)(y = 10) 
<console>:10: error: not enough arguments for method f: 
    (implicit y: Int, implicit z: Int)Int. 
Unspecified value parameter z. 
       f(10)(y = 10) 
       ^

Можно указать неявный аргумент, т.е. y, но оставить z неявного разрешения?

ответ

2

Вы можете использовать implicitly method для удовлетворения требований в списке параметров в:

scala> f(10)(y = 10, implicitly) 
res0: Int = 25 

Как это часть Predef, он доступен без оператора импорта.

+0

Nice catch. Но лучше было бы позиционировать 'implicitly' перед символом' y = 10', так как 'f (10) (z = 10, неявно)' не будет компилироваться. – Odomontois

+0

@ Odomontois: yep, и названный аргумент в настоящее время в значительной степени лишний - однако, я хотел представить ответ как можно ближе к примеру вопроса. –

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