加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala意外地无法确定扩展函数的类型

发布时间:2020-12-16 09:48:44 所属栏目:安全 来源:网络整理
导读:为什么,在Scala中,给出: a = List(1,2,3,4)def f(x : String) = { x } 是的 a.map(_.toString) 工作,但 a.map(f(_.toString)) 给出错误 missing parameter type for expanded function ((x$1) = x$1.toString) 解决方法 嗯… f()接受一个String作为参数
为什么,在Scala中,给出:

a = List(1,2,3,4)
def f(x : String) = { x }

是的

a.map(_.toString)

工作,但

a.map(f(_.toString))

给出错误

missing parameter type for expanded function ((x$1) => x$1.toString)

解决方法

嗯… f()接受一个String作为参数。构造_.toString具有类型A&lt ;: Any =>串。函数f()期望一种类型的String,因此上面的示例不会输入check。看来Scala在这种情况下是友好的,并给用户另一个机会。错误消息意味着:“通过我的类型推理算法,这不编译。把类型放在它,它可能,如果它是我不能推断的东西。

在这种情况下,你必须写匿名函数longhand,即a.map(n => f(n.toString))。这不是类型推断的限制,而是通配符符号的限制。基本上,当你编写a.map(f(_。toString))时,_.toString会扩展成一个匿名函数,在最近的括号中可以找到,否则这将导致巨大的歧义。想象一下像f(g(_。toString))。这是否意味着f(g(x => x.toString))或f(x => g(x.toString))?对于多个嵌套函数调用将产生更差的模糊性。因此,Scala类型检查器采用最合理的解决方案,如上所述。

Nitpick:你的代码的第一行应该是val a = List(1,4):)。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读