考虑以下代码,我将方法和函数作为参数传递给map()
val list1:List[Int]=List(10,20,30)
def func1(x:Int):Int={
x+10
}
list1.map(func1)
list1.map(_+10)
关于ETA扩展我几乎没有问题:
def x:Int=10
和val x:Int=10
之间是否存在性能差异?答案 0 :(得分:2)
您要问的表达方式之间没有显着差异。
val x
会招致一个私人领域。
请注意,与vs.map(_+10)
相比,vs.map(x => f(x))
会内联函数。但是你必须在任何情况下创建一个函数对象。
名称调用参数=> X
是一个() => X
。
从REPL中,使用javap
显示代码。 -c
代码,-v
代表详细信息。
scala> vs.map(f)
res0: List[Int] = List(2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
scala> :javap -pv -
[snip]
答案 1 :(得分:0)
其中一个不同之处是,val
值是在加载类时测量的,而def
是在调用时测量的。{/ p>
一个简单的例子是,假设你在类中有100K val
个变量(为了论证),系统可能需要很长时间才能启动。但是如果你有def A
声明100K val
。只有在调用A
时才会触及性能。