我试图用implicit参数来定义我认为是“默认参数”的内容:
scala> def f(implicit x: Int, y: String) = y
f: (implicit x: Int, implicit y: String)String注意-我试图将implicit x: Int定义为第二个参数,但是我得到了一个编译时错误:
scala> def f(y: String, implicit x: Int) = y
<console>:1: error: identifier expected but 'implicit' found.
def f(y: String, implicit x: Int) = y总之,我定义了一个implicit Int。
scala> implicit val x: Int = 100
x: Int = 100然后,我只使用一个f参数就无法调用String:
scala> f("foo")
<console>:10: error: not enough arguments for method f:
(implicit x: Int, implicit y: String)String.
Unspecified value parameter y.
f("foo")
^接下来,我试图通过指定参数来调用f函数。那也失败了。
scala> f(y = "foo")
<console>:10: error: not enough arguments for method f:
(implicit x: Int, implicit y: String)String.
Unspecified value parameter x.
f(y = "foo")
^是否可以通过为f提供一个隐式参数和只提供一个参数来调用函数y?
发布于 2015-04-01 20:10:33
隐式参数部分都是或为零--要么显式地传递每个参数(假设它们没有默认值),要么没有它们。如果您想让f("foo")工作,您需要这样做:
def f(y: String)(implicit x: Int) = y不过,对于这种方法,我会非常小心--我个人越来越倾向于认为,在除了类型类实例之外的任何情况下使用instances都是个坏主意,而让隐式Int值在其中浮动是一种可怕的做法。
https://stackoverflow.com/questions/29399733
复制相似问题