我想不断提示用户以给定格式输入日期,直到他/她正确为止。
这就是我所做的:
def readDate(prompt: String): Date = {
var date: Option[Date] = None
Iterator.continually {
val startDateString = readLine(prompt)
val startDate = catching(classOf[ParseException]).opt(asDate(startDateString))
date = startDate
startDate
}.takeWhile(_ == None).foreach {
date =>
println("Incorrect format. Try again.")
}
date.get
}
asDate
仅SimpleDateFormat.parse
在输入的字符串上使用。
现在,这似乎可行,但我很确定这不是正确的方法。
我真的不明白如何处理这些链式迭代器(因为 Iterator.continually 和 takeWhile 都返回 AbstractIterator 的实例)。
我基本上有两个问题:
1)有没有办法从“返回startDate
” Iterator.continually
?我已经尝试过并且失败了 - map
ping 它。我想要这个以摆脱var date
and date = startDate
。
2)如果我不想在读取之间发生任何事情,我会如何处理最后一个 foreach?我已经看到,如果我只是将其删除(我认为是因为 next() 没有被调用),则没有任何效果,但是可以像这样将它留在那里:
takeWhile(_ == None).foreach { date => {}}
?
有没有比“空”foreach 更好的方法?
谢谢!