1

Scalaz にはメソッドがありますが、asMAメソッドがありませんasIdentity。以下は、Scala 2.9.1 で示されているようにコンパイル エラーを生成します。

Some(0).max(None)

<console>:14: error: type mismatch;
 found   : None.type (with underlying type object None)
 required: Ordering[?]
              Some(0).max(None)
                          ^

これは、明示的なキャストで修正できます。

(Some(0):Identity[Option[Int]]).max(None)

存在する場合、これはよりエレガントになるように私には思えますasIdentity:

Some(0).asIdentity.max(None)
4

1 に答える 1

4

インスタンスIdentityがあるという事実を使用できます。Pure

scala> some(0).pure[Identity] max None
res0: Option[Int] = Some(0)

の代わりに型の何かから始めるために、ここではsome(0)代わりに使用する必要があることに注意してください。Some(0)Option[Int]Some[Int]

もありますIdentity.apply

scala> Identity(some(0)) max None
res1: Option[Int] = Some(0)

これらのオプションと、何かをラップすることを明示的に示すIdentity必要があるのは、このようなあいまいさを解消する必要があるほんの一握りのケースだけであるという事実を考えると、Scalaz の設計者は、追加のasIdentity方法。

于 2012-11-09T22:03:09.620 に答える