ユーザーが正しく理解できるまで、特定の形式で日付を入力するようにユーザーに継続的に促したいと思います。
これは私がやったことです:
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.continuouslyとtakeWhileの両方がAbstractIteratorのインスタンスを返すため)。
基本的に2つの質問があります。
startDate
1)から「戻る」方法はありIterator.continually
ますか?私はそれをmap
pingしようとして失敗しました。var date
とを取り除くためにこれが欲しいですdate = startDate
。
2)読み取りの間に何も起こらないようにするには、最後のforeachをどうしますか?削除しただけでは何も機能しないことを確認しましたが(next()が呼び出されていないためだと思います)、次のようにそのままにしておいてもかまいません。
takeWhile(_ == None).foreach { date => {}}
?
「空の」foreachよりも良い方法はありますか?
ありがとう!