首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用隐式和非隐式调用函数

使用隐式和非隐式调用函数
EN

Stack Overflow用户
提问于 2015-04-01 20:02:13
回答 1查看 121关注 0票数 2

我试图用implicit参数来定义我认为是“默认参数”的内容:

代码语言:javascript
复制
scala> def f(implicit x: Int, y: String) = y
f: (implicit x: Int, implicit y: String)String

注意-我试图将implicit x: Int定义为第二个参数,但是我得到了一个编译时错误:

代码语言:javascript
复制
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

代码语言:javascript
复制
scala> implicit val x: Int = 100
x: Int = 100

然后,我只使用一个f参数就无法调用String

代码语言:javascript
复制
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函数。那也失败了。

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-01 20:10:33

隐式参数部分都是或为零--要么显式地传递每个参数(假设它们没有默认值),要么没有它们。如果您想让f("foo")工作,您需要这样做:

代码语言:javascript
复制
def f(y: String)(implicit x: Int) = y

不过,对于这种方法,我会非常小心--我个人越来越倾向于认为,在除了类型类实例之外的任何情况下使用instances都是个坏主意,而让隐式Int值在其中浮动是一种可怕的做法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29399733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档