功能 – 为什么Scala类方法不是一等公民?
我刚开始使用
Scala并且正在修改工作表.例如:
def merp(str: String) : String = s"Merrrrrrrp $str" val merp2 = (str: String) => s"Merrrrrrrp $str" val merp3 = (str: String) => merp(str) val merp4 = merp _ merp("rjkghleghe") merp4("rjkghleghe") 相应的工作表结果如下: merp: merp[](val str: String) => String merp2: String => String = <function1> merp3: String => String = <function1> merp4: String => String = <function1> res0: String = Merrrrrrrp rjkghleghe res1: String = Merrrrrrrp rjkghleghe 例如,说val merp5 = merp会产生错误,因为显然方法不能像函数那样成为值.但我仍然可以将方法作为参数传递.我在以下代码片段中演示了这一点,改编自a similar SO question: def intCombiner(a: Int,b: Int) : String = s"herrrrrrp $a derrrrrrp $b" def etaAbstractor[A,B](combineFoo: (A,B) ? String,a: A,b: B) = combineFoo(a,b) etaAbstractor(intCombiner,15,16) 工作表结果: intCombiner: intCombiner[](val a: Int,val b: Int) => String etaAbstractor: etaAbstractor[A,B](val combineFoo: (A,B) => String,val a: A,val b: B) => String res10: String = herrrrrrp 15 derrrrrrp 16 >方法 – 不是一流的限制,可能是Scala的JVM交互所强加的,还是它是语言设计的决定? 欢迎理论,计算机科学的答案,以及language specification中任何相关要点的指示.谢谢! 解决方法
免责声明:我不是计算机科学家,但我会猜测:
> Method是对象的一部分,不存在于对象之外.你不能单独传递方法. Closure是封装状态的另一种(等效?)方式,通过将对象方法转换为独立函数(在Scala中使用apply()方法的另一个对象),您创建了一个闭包.这个过程称为eta-expansion. §3.3.1,§6.26.5 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |