请选择 进入手机版 | 继续访问电脑版

risc-v中文社区

 找回密码
 立即注册
查看: 2458|回复: 1

[原创] risc-v开发基础 Scala Seq的tail,init,scanLeft---(36)

[复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2021-9-12 13:24:52 | 显示全部楼层 |阅读模式
def method(requests:Seq[Boolean]): Seq[Boolean] = requests.length match {
  case 0 => Seq()
  case 1 => Seq(true)
  case _ => true +: requests.tail.init.scanLeft(requests.head)(_ || _).map(!_)  //+: 是中缀操作符,右边的操作数是调用方法的对象 true放在前面
  //SeqLike类中有:+和+:,其中:+是普通操作方法,将右加到左的尾部,+:则将左加到右的前部
  //总结:最开始添true,去掉last元素,只要某位置出现true,则从它开始包括它在内返回的Seq中都是false
}
println(method(List(false))) //List(true)
println(method(List(false,true))) //List(true, true)
println(method(List(false,true,false))) //List(true, true, false)
val lx = List(false,true)
val lxti = lx.tail.init
println(lxti) //List()
println(lx.tail.init.scanLeft(lx.head)(_ || _)) //List(false)


回复

使用道具 举报

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
 楼主| 发表于 2021-9-12 13:26:12 | 显示全部楼层
上面def method代码在chiel3的仲裁器源代码中有出现,所以写在此处,以便了解。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-4-19 09:05 , Processed in 0.025078 second(s), 17 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表