Scala模糊与无人函数调用
请原谅长时间的设置.这个问题与
Scala: ambiguous reference to overloaded definition – best disambiguation?有关,但没有回答.
我对Scala很陌生,有一件让我失望的事情就是Scala: >拥有一流的功能 这两种语言功能令我感到困惑.看下面的代码: class MyClass { def something(in: String): String = { in + "_X" } def something: String => String = { case _ => "Fixed" } } val my = new MyClass() println(List("foo","bar").map(my.something)) 我希望通过调用匹配地图所需的String =>的原型来打印List(“foo_X”,“bar_X”). ?论点.相反,输出是List(“Fixed”,“Fixed”) – Scala 2.11调用无参数something()然后将其返回值传递给地图. 如果我们注释掉某个东西的第二个无参数原型,那么输出就会变成预期的结果,证明另一个原型在上下文中是有效的. 将空参数列表添加到第二个原型(使其定义为something())也会改变行为. 将my.something更改为my.something(_)可以将Scala唤醒之前默认忽略的模糊性: error: ambiguous reference to overloaded definition,both method something in class MyClass of type => String => String and method something in class MyClass of type (in: String)String match argument types (String) println(List("foo","bar").map(my.something(_))) 即使使用所谓的用于此目的的魔术尾随下划线也不起作用: val myFun: (String) => String = my.something _ 这导致: error: type mismatch; found : () => String => String required: String => String val myFun: (String) => String = my.something _ 我的问题: >如果我完全按照编写的MyClass(没有对原型进行更改,特别是不向其中一个原型添加空参数列表),我如何明确地告诉Scala我希望第一个单参数版本的东西通过作为另一个电话的参数? 解决方法
我已经在Scala问题跟踪器上提交了一个错误,并且共识似乎是这种行为是一个错误.编译器应该抛出关于“my.something”的模糊引用的错误.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |