关于scala占位符_的一点理解

在看到 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值