皆さん、私は Scala の学習を強化するためだけに、本からいくつかの Java コード サンプルを慣用的な Scala に変換しようとしています。私は小さなことには慣れていますが、for
式を使用するときに例外をシームレスに処理することに困惑しています。
前提は、ホスト名のリストが与えられた場合、ホスト名/IP アドレスのタプルのリストを取得することです。十分に単純に聞こえ、良いケースではうまく機能します。
def printHostInfo(args: Array[String]) {
val tuples = for {
arg <- args
inet <- InetAddress.getAllByName(arg.trim)
} yield (inet.getHostName, inet.getHostAddress)
println(tuples mkString "; ")
}
しかし、ここからが難しい部分です。間違ったホスト名を入力したときに発生する例外を簡単に処理したいのです。新しいTry
構成を使用できますが、問題を回避するだけです。
def printHostInfo(args: Array[String]) {
val tuples = for {
arg <- args
inet <- Try(InetAddress.getAllByName(arg.trim)) getOrElse Array()
} yield (inet.getHostName, inet.getHostAddress)
println(tuples mkString "; ")
}
上記のスニペットでは、ホスト名が不適切な場合、エントリはスキップされ、問題はありません。しかし、私がやりたいのは、悪いホストの場合、 のようなタプルを取得することです(www.hostname.com, Bad host name)
。などをいじってみましOption
たが、まだ解読する資格がないコンパイル時エラーが発生します。誰かが簡潔で、Scala が提供するすべての機能を使用する慣用的なソリューションを提案できますか? ありがとう。