6

値を返す必要があり、誰かが値を尋ねてきたら、次の 3 つのいずれかを伝えます。

  1. ここに値があります
  2. 価値がない
  3. この値に関する情報はありません (不明)

ケース 2 はケース 3 とは微妙に異なります。例:

val radio = car.radioType
  1. 値はわかっています: ラジオの種類を返します。たとえば、「パイオニア」とします。
  2. b. 値がありません: なしを返します
  3. c. この車に関するデータがありません。ラジオが付いているかどうかはわかりません

scala の None を拡張して Unknown を作ろうかと思ったのですが、無理そうです。

提案?

ありがとう!

アップデート:

理想的には、次のようなコードを記述できるようにしたいと考えています。

car.radioType match { 
   case Unknown => 
   case None => 
   case Some(radioType : RadioType) => 
}
4

6 に答える 6

4

scala.Either を使用できます。例外的な値には Left を使用し、この場合は Option になる期待値には Right を使用します。

scala> type Result = Either[String, Option[String]]
defined type alias Result

scala> val hasValue: Result = Right(Some("pioneer"))
hasValue: Result = Right(Some(pioneer))

scala> val noValue: Result = Right(None)
noValue: Result = Right(None)

scala> val unknownValue = Left("unknown")
unknownValue: Left[java.lang.String,Nothing] = Left(unknown)
于 2009-11-15T17:03:15.417 に答える
2

3 つの可能性で独自のものを作成できます。または、 car.radioType タイプのいずれかが不明な場合は、ケースのガードを使用してそれを処理します。独自のものを作成する場合は、Product 特性も含める必要があります。liftweb には Box タイプがあります。これは、フル、エンプティ、およびエラーの発生を可能にするオプションです。

于 2009-11-15T16:56:39.227 に答える