scala 语法

占位符:

转载自:https://www.cnblogs.com/zzhangyuhang/p/9000088.html

Scala语言为了让函数字面量更加精简,还可以使用下划线作为占位符,用来表示一个或多个参数

我们用来表示的参数必须满足只在函数字面量中出现一次。

我们用例子来看占位符的用法

1

2

3

4

5

scala> val list = List(1,2,3,4,5)

list: List[Int] = List(12345)

 

scala> list.filter( _ > 3 )//等同于 x => x > 3

res0: List[Int] = List(45)

我们看到 _ 就好像是表达式中需要被填入的空,函数每次调用的时候这个空就被一个传入参数填上

但是参数是依次填入的,不能重复。也就是说,像上例的 1,2,3,4,5.并不能从头再来依次。

1

2

3

4

5

scala> val nums = List(1,2,3,4,5)

nums: List[Int] = List(12345)

 

scala> nums.map((_,1)) //等同于 x => (x,1)

res1: List[(Int, Int)] = List((1,1), (2,1), (3,1), (4,1), (5,1))

当然,我们也可以使用多个占位符来表示多个参数。

1

2

3

4

5

scala> val nums = List(1,2,3,4,5)

nums: List[Int] = List(12345)

 

scala> nums.reduce( _+_ ) //相当于 a + b

res2: Int = 15

上例中,第一个占位符代表一个参数,第二个代表不同于第一个的参数。

执行过程是这样的,先第一个参数 1 填上第一个占位符,第二个参数 2 填入第二个占位符,注意这里并不是参数列表从新填一次。

执行1+2 = 3.因为reduce,3重新排入list中,list现在为3,3,4,5

然后再次填入,3 + 3,list中变为 6,4,5

依次类推。结果为 15.

占位符也可以代替一个参数列表

1

2

3

4

5

scala> def sum(a:Int,b:Int,c:Int) = a+b+c

sum: (a: Int, b: Int, c: Int)Int

 

scala> val a = sum _

a: (Int, Int, Int) => Int = $$Lambda$1137/810864083@755a4ef5

我们这里用了一个占位符代替了sum方法的参数列表,注意方法和占位符之间要有个空格,因为scala语言中方法名可以定义这样:sum_ 。

val twice1: Double => Double = x => x * 2
val twice2: Double => Double = _ * 2
val twice3 = (x: Double) => x * 2
val twice4 = (_: Double) * 2
 

val lt1: (Double, Double) => Boolean = (x, y) => x < y
val lt2: (Double, Double) => Boolean = _ < _
val lt3 = (x: Double, y: Double) => x < y
val lt4 = (_: Double) < (_: Double)
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值