Scala 2.12.0:将函数文字赋值给值的输出

时间:2017-03-18 08:25:39

标签: scala

在Scala 2.12.0中,当为函数文字赋值时,输出类似于var arrayString = [ [ "char" : "Z" ], [ "char" : "Y" ], [ "char" : "X" ], [ "char" : "W" ], [ "char" : "V" ], [ "char" : "U" ], [ "char" : "T" ], [ "char" : "S" ] ] let arrayIndex = [2, 3, 5] arrayString = arrayString.enumerated() .filter { !arrayIndex.contains($0.0 + 1) } .map { $0.1 } print(arrayString) ,而在2.11.8中,它将是<template> <div id="a" :style="style" @mouseover="mouseOver()"> </div> </template> <script> export default { name: 'SquareButton', props: ['color'], computed: { style () { return 'background-color: ' + this.hovering ? this.color: 'red'; } }, data () { return { hovering: false } }, methods: { mouseOver () { this.hovering = !this.hovering } } } </script> <style scoped> <style> 。为什么会有这样的变化? $$Lambda是否表示lambda表达式?

2.12.0:

<functionX>

2.11.8:

$$Lambda

1 个答案:

答案 0 :(得分:2)

在Java平台上,Scala 2.12编译器对Java 8+编译器使用的匿名函数使用相同的编码。因此,您看到的差异基本上是在第一种情况下,您从Scala toString()实例中看到Function1[Int, Int]方法的输出,而在第二种情况下,您看到{{ 1 8} Java 8 Lambda。

但请注意,这是Scala-JVM编译器的私有内部实现细节。你应该依赖它。它可能是,并且在Scala.js和Scala-native上可能 不同。