我有一些我正在尝试使用 Scala 重构的 Ruby 代码。我将在下面给出一个代码示例,但是 Ruby 的动态特性使得编写它变得微不足道(这也有助于我比 Scala 更精通 Ruby)。这是Ruby中的代码:
我有一堆常量定义如下
REG_WEEK_1_START = Date.parse('2013-09-05')
REG_WEEK_1_END = Date.parse('2013-09-09')
REG_WEEK_2_START = Date.parse('2013-09-12')
REG_WEEK_2_END = Date.parse('2013-09-16')
REG_WEEK_3_START = Date.parse('2013-09-19')
REG_WEEK_3_END = Date.parse('2013-09-23')
然后,为了弄清楚我是否在某一周(并且你不能在这里使用连续函数,因为在现实世界的例子中,几周可以是 1 到 7 天后的任何地方),我使用这个微不足道的环形:
def get_week
date = Date.now
for i in 1..17
return i if date >= const_get("REG_WEEK_#{i}_START") && date <= const_get("REG_WEEK_#{i}_END")
end
return 0
end
在 Ruby 中这样做被证明是微不足道的,因为您可以使用该const_get
方法动态地按名称调用常量。现在,我在 Scala 中开始了这个示例,我猜正确的答案是以某种方式 Map 或使用 Enums,但我不知道如何将它拼凑在一起,但显然这样的事情是行不通的:
def getCurrentWeek: Int = {
val REG_WEEK_1_START = MyDateTimeHelper.parseDate("20130905")
val REG_WEEK_1_END = MyDateTimeHelper.parseDate("20130909")
val REG_WEEK_2_START = MyDateTimeHelper.parseDate("20130912")
val REG_WEEK_2_END = MyDateTimeHelper.parseDate("20130916")
.... more DATES ...
}
如何在这里循环是我被困在 Scala 中的地方。或者如果我什至应该在这里循环,因为我不熟悉 Scala 数据结构,所以可能有一种更优化的方法来解决这个问题。任何拥有更多 Scala 经验的人都有一个解决方案来确定当前日期是否介于每个 START 和 END 值之间,这将是理想的。