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 回答