我有以下用例。用户提供两种字符串type
和growth
。我需要将每个字符串的值转换为已知Map中的整数,并返回两个值的总和。
我Map字符串的方法是:
object Types extends Enumeration {
val T1 = 5
val T2 = 6
// list of values is really long!
val TYPE1 = "type1"
val TYPE2 = "type2"
}
object Growth extends Enumeration {
val G1 = 1
val G2 = 10
// list of values is really long!
val GROWTH1 = "growth1"
val GROWTH2 = "growth2"
}
现在假设用户正在调用sum("type1", "growth2")
,预期输出为15,因为5+10=15
我写了这个 backbone 函数,但是我在使用枚举对象时遇到了麻烦。如果没有这么多的if/else
,我该怎么做呢?
def sum(type: String, growth: String) : Int = {
var sum:Int = 0
????
return sum
}
如果我的方法有缺陷,我很乐意尝试另一种方法
3条答案
按热度按时间fnvucqvd1#
scala.Enumeration
不允许使用这样的语法它实际上要求你做一些更像
然后你传递的不是
String
而是MyEnum.Value
。由于放弃了传递
String
(至少在Scala 2中,在Scala 3中可以选择使用type MyEnum = "value1" | "value2"
和/或opaque type MyEnum
),因此创建了一个密封层次结构如果需要构造所有可能值的集合,可以使用Enumeratum库代替
scala.Enumeration
uqxowvwt2#
这可以通过创建一个
Map
来完成,该Map
给出每个String
的分数:然后可以使用
foldLeft
计算得分:Map
中缺少的值具有默认值0
。slsn1g293#
可以扩展
Enumeration
类的Val
类。示例: