Учитывая следующее:Альтернативный синтаксис при определении неявного?
scala> trait Foo { def get: String = "get" }
defined trait Foo
Я реализовал это и сделал неявное:
scala> case class FooImpl(x: String) extends Foo {
| override def get = s"got $x"
| }
defined class FooImpl
scala> implicit val fooImpl = FooImpl("yo")
fooImpl: FooImpl = FooImpl(yo)
Наконец, я попытался написать метод, который неявно устраняет Foo
, возвращая get
на этом неявно разрешен класс.
scala> def f[A: Foo](x: A) = x.get
<console>:11: error: Foo does not take type parameters
def f[A: Foo](x: A) = x.get
^
<console>:11: error: value get is not a member of type parameter A
def f[A: Foo](x: A) = x.get
^
Но я получил вышеуказанные ошибки.
Так что я переписал его, используя ключевое слово implicit
:
scala> def f(implicit x: Foo): String = x.get
f: (implicit x: Foo)String
scala> f
res0: String = got yo
Можно ли переписать этот пример, чтобы явно не указать implicit
ключевое слово?
Примечание - возможно, что я смущаю это обозначение с помощью TypeTag по разделу Using a Context bound of a Type Parameter
.