作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚开始使用 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
merp3
? merp4
还有一个 eta abstraction ,还是偷偷摸摸地相似? etaAbstractor
工作? Scala 正在悄悄取代 intCombiner
与 intCombiner _
? 最佳答案
免责声明:我不是计算机科学家,但我会尝试猜测:
apply()
方法的对象)您正在创建一个闭包。这个过程被称为 eta 扩展。 §3.3.1 , §6.26.5 val merp3 : (String => String) = merp
. §6.26.5 merp4
也是eta扩展。 §6.7 关于function - 为什么 Scala 类方法不是一等公民?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30495571/
我是一名优秀的程序员,十分优秀!