Расширить парадигматический ответ.Вот как вы постигаете неявное.Неявные преобразования вступают в игру, когда типы не проверяются.Когда это происходит, компилятор будет искать неявное преобразование для использования, чтобы типы соответствовали.
После небольшой очистки вашего примера в REPL компилятор покажет:
scala> ac.myMethod((s:String) => s + "!")
<console>:9: error: type mismatch;
found : String => java.lang.String
required: Func[java.lang.String,?]
ac.myMethod((s:String) => s + "!")
Таким образом, компилятор сообщит вам, что нашел (String) => (String)
, но ему нужно Func[String, ?]
.Поэтому вы хотите обеспечить неявное преобразование между типом found и типом required .Таким образом, подпись должна выглядеть примерно так:
implicit def fun2Func(fun: (String) => String): Func[String,String]
Затем следующим шагом будет осознание того, что неявное преобразование может быть обобщено с типами A и R.
Интересно, что касается идентификатораесли бы вам было лучше, если бы вы снова использовали что-то с полки, например http://code.google.com/p/guava-libraries/.