在Scala中创建星期枚举的简明方法
发布时间:2020-12-16 18:10:52 所属栏目:安全 来源:网络整理
导读:我是 Scala的新手,所以请好好的.如果我遗漏了一些明显的东西,你不得不原谅我. 我正在尝试创建一个类似枚举的结构来表示Scala中一周的日子. 我想要一个方法,接受一个字符串,可以是数字1到7,当天的全名,或三个字母的缩写,任何大小写,并返回正确的一天.理想情况
我是
Scala的新手,所以请好好的.如果我遗漏了一些明显的东西,你不得不原谅我.
我正在尝试创建一个类似枚举的结构来表示Scala中一周的日子. 这是我目前的尝试: object DayOfWeek extends Enumeration with CalendarField { val Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday = Value def apply(v:String) = { v.toUpperCase match { case Int(x) => x match { case 1 => Sunday case 2 => Monday case 3 => Tuesday case 4 => Wednesday case 5 => Thursday case 6 => Friday case 7 => Saturday case _ => throw new IllegalArgumentException("Invalid value for day of week: " + v) } case "SUN" | "SUNDAY" => Sunday case "MON" | "MONDAY" => Monday case "TUE" | "TUEDAY" => Tuesday case "WED" | "WEDNESDAY" => Wednesday case "THU" | "THURSDAY" => Thursday case "FRI" | "FRIDAY" => Friday case "SAT" | "SATURDAY" => Saturday case _ => throw new IllegalArgumentException("Invalid value for day of week: " + v) } } } object Int { def unapply(s : String) : Option[Int] = try { Some(s.toInt) } catch { case _ : java.lang.NumberFormatException => None } } 这失败了几点: >各个值不是CalendarField的子类 – 它们只是值. 任何关于如何解决这些问题或更简洁的解决方案的建议都将不胜感激.谢谢. 解决方法
我可能会实现这样的事情:
sealed trait DayOfWeek case object Monday extends DayOfWeek case object Tuesday extends DayOfWeek // etc. object DayOfWeek { def unapply(s: String): Option[DayOfWeek] = s.toUpperCase match { case Int(x) => x match { case 1 => Some(Sunday) // ... case _ => None } case "SUN" | "SUNDAY" => Some(Sunday) // ... case _ => None } def apply(s: String): DayOfWeek = s match { case DayOfWeek(d) => d case _ => throw new IllegalArgumentException( "Invalid value for day of week: " + s) } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |