在看到
scala> val f = (_:Int) + (_:Int)
f: (Int, Int) => Int = $$Lambda$1108/2058316797@4a8bf1dc
scala> f(1,2)
res5: Int = 3
有点不太明白占位符的使用。在scala REPL测试了下:
scala> val f2 = (_:Int) + (_:Int)
f2: (Int, Int) => Int = <function2>
scala> val f3:(Int,Int)=>Int = (a,b)=>a+b
f3: (Int, Int) => Int = <function2>
scala> val f4:(Int,Int)=>Int = (_:Int)+(_:Int)
f4: (Int, Int) => Int = <function2>
我记得最开始占位符 的意思是这么说的:
Scala语言为了让函数字面量更加精简,还可以使用下划线作为占位符,用来表示一个或多个参数。
我们用来表示的参数必须满足只在函数字面量中出现一次。
那么占位符就是用来用来处理函数字面量问题的。
scala> val list = List(1,2,3,4,5)
list: List[Int] = List(1, 2, 3, 4, 5)
scala> list.filter( _ > 3 )//等同于 x => x > 3
res0: List[Int] = List(4, 5)
上面的占位符_就是表示 函数字面量 x => x > 3 的。
不过占位符的强大之处在于他也可以使用多个占位符来表示多个参数。
scala> val nums = List(1,2,3,4,5)
nums: List[Int] = List(1, 2, 3, 4, 5)
scala> nums.reduce( _+_ ) //相当于 a + b
res2: Int = 15
上面的 _ + _ 也就是相当于 (a:Int, b:Int)=> a + b
那么最开始的困惑也就得到解决了。
(_:Int) + (_:Int) 也就是表示函数字面量 : (a,b)=>a+b