gpt4 book ai didi

scala - 获取 Scala 枚举中值的上一个和下一个元素

转载 作者:行者123 更新时间:2023-12-02 01:51:02 37 4
gpt4 key购买 nike

我想向 Scala 添加两个新操作 Enumeration获取给定特定值(如果存在)的上一个和下一个值。例如,我想写这样的东西:

object Nums extends MyNewEnumerationType {
type Nums = Value
val One,Two,Three = Value
}

Nums.nextOf(One) // Some(Two)
Nums.prevOf(One) // None

我的想法是创建一个新类并以这种方式添加方法:

class PrevNextEnum extends Enumeration {

val prevOf = values.zip(None +: values.map{_.some}.toSeq).toMap
val nextOf = {
if (values.isEmpty) Map.empty
else values.zip(values.tail.map{_.some}.toSeq :+ None).toMap
}

}

问题是这不起作用,因为当 prevOfnextOf 被初始化时,values 是空的。

第一个问题:为什么values是空的,什么时候填入值?

第二个问题:如何实现prevOfnextOf

第三个问题:是否可以将方法prevOfnextOf添加到值类型而不是枚举?写 One.next 感觉比写 Num.nextOf(One)

更自然

最佳答案

尝试以下代码:

class PrevNextEnum extends Enumeration {

lazy val prevOf = {
val list = values.toList
val map = list.tail.zip(list.map(Some(_))).toMap + (list.head -> None)
map
}
lazy val nextOf = {
val list = values.toList
val map = (list.zip(list.tail.map(Some(_)) :+ None).toMap)
map
}
}

object Nums extends PrevNextEnum {
type Nums = Value
val One, Two, Three = Value
}

object App extends App {
println(Nums.prevOf(Nums.Two))
println(Nums.nextOf(Nums.One))
println(Nums.nextOf(Nums.Three))
println(Nums.prevOf(Nums.One))
}

关于scala - 获取 Scala 枚举中值的上一个和下一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22676052/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com