使用隐式参数调用方法
Calling method with an implicit parameter
我有以下方法:
def test[T](implicit ev: T <:< Int, t : T) = println(t)
怎么调用呢?我试过了
test(10)
但是编译器打印出如下错误:
Error:(19, 9) not enough arguments for method test: (implicit ev: <:<[T,Int], implicit t: T)Unit.
Unspecified value parameter t.
test(10)
^
首先,我认为我们可以省略隐式参数,只指定显式参数。其次,为什么说参数 t
是隐式的?
implicit t: T
它实际上是如何工作的?
问题是隐式参数应该在它自己的列表中,像这样:
def test[T](t : T)(implicit ev: T <:< Int) = println(t)
试试吧!
First of all, I thought that we could just omit implicit parameters and specify only explicit ones.
您要么指定列表中的所有隐含项,要么根本不指定它们。 According to the specification,如果一个参数被标记为隐式,则整个参数列表也被标记:
An implicit parameter list (implicit p1, ……, pn
) of a method marks the parameters p1, …, pn
as implicit.
secondly, why does it's saying that that the parameter t is implicit?
因为你在第一部分的回答。
如果你还想那样调用它,你可以使用implicitly
:
test(implicitly, 10)
一般情况下,建议您在单独的参数列表中要求隐式:
def test[T](i: Int)(implicit ev: T <:< Int) = println(t)
我有以下方法:
def test[T](implicit ev: T <:< Int, t : T) = println(t)
怎么调用呢?我试过了
test(10)
但是编译器打印出如下错误:
Error:(19, 9) not enough arguments for method test: (implicit ev: <:<[T,Int], implicit t: T)Unit.
Unspecified value parameter t.
test(10)
^
首先,我认为我们可以省略隐式参数,只指定显式参数。其次,为什么说参数 t
是隐式的?
implicit t: T
它实际上是如何工作的?
问题是隐式参数应该在它自己的列表中,像这样:
def test[T](t : T)(implicit ev: T <:< Int) = println(t)
试试吧!
First of all, I thought that we could just omit implicit parameters and specify only explicit ones.
您要么指定列表中的所有隐含项,要么根本不指定它们。 According to the specification,如果一个参数被标记为隐式,则整个参数列表也被标记:
An implicit parameter list (
implicit p1, ……, pn
) of a method marks the parametersp1, …, pn
as implicit.
secondly, why does it's saying that that the parameter t is implicit?
因为你在第一部分的回答。
如果你还想那样调用它,你可以使用implicitly
:
test(implicitly, 10)
一般情况下,建议您在单独的参数列表中要求隐式:
def test[T](i: Int)(implicit ev: T <:< Int) = println(t)