Ответ таков: , если вы указываете список параметров (то есть используете парены), затем вы должны указать параметры в нем (или, точнее, без значений по умолчанию).
Если вы опустите парены в непустом списке параметров, параметры которого implicit
, то компилятор может внедрить их для вас (при условии, что он сможет однозначно найти соответствующие последствия в вашей области видимости: как в вашем первом примере)
1 to 10 sum
Если вы хотите передать параметр самостоятельно (в этом примере это делать не нужно), вы можете воспользоваться Predef.implicitly
, который в основном возвращает однозначное неявное значение в области (при условии, что оно есть) , Их использование здесь будет:
(1 to 10).sum(implicitly[Numeric[Int]])
(1 to 10).sum[Int](implicitly)
Это особенно важно в методах, которые принимают более одного неявного параметра, из которых вы можете переопределить только один (затем вы можете использовать implicitly
для других). Например, в scalaz
aFoldable.sum(implicitly, myMonoid) //uses implicit Foldable but bespoke monoid
На ваш вопрос о scaladoc прецедент ; это запись phantom , показывающая, как использовать (в противном случае потенциально запутанный) метод со списком неявных параметров. Существование этой записи в скаладоке можно проследить до этого пресловутого вопроса .