Ответ заключается в том, что если вы указываете список параметров (т.е. используете круглые скобки), тогда вы должны указать параметры в нем (точнее, без значений по умолчанию).
Если вы опускаете скобки в непустом списке параметров, параметры которого равны 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 варианте использования; это фиктивная запись, показывающая, как использовать (в противном случае потенциально запутанный) метод со списком неявных параметров. Существование этой записи scaladoc можно проследить до этот печально известный вопрос.
person
oxbow_lakes
schedule
04.04.2011