scala - 在任一中指定 Case 对象的类型

标签 scala singleton-type

如果我有一个对象如下:

case object Foo

我尝试创造这样的值(value)
Either[Foo, B]

我收到一个编译错误,说找不到 Foo。但如果我这样做:
Either[Foo.type, B]

它编译。我的问题是这样做是否正确?

最佳答案

每当您想声明 object 的类型时在 Scala 中,你必须像 YourObject.type 一样声明它.

原因很简单,如YourObject已经是 实例 .所以.type是您必须在 中声明对象类型(单例)的方式斯卡拉 .

这里有一个例子:

object YourObject

def doit(obj: YourObject.type) = {}

def doitEventually(obj: Option[YourObject.type]) = {}


doit(YourObject)
doitEventually(Some(YourObject))

我找不到相应的文档,所以也许有人可以帮忙解决这个问题。

规范在这里:singleton-types (正如 Mojo 在评论中提到的)

关于scala - 在任一中指定 Case 对象的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59531680/

相关文章:

haskell - 在单例数据类型中使用 Nat/Natural 的正确方法是什么?

haskell - 将 Ord 实例添加到 'singleton' 包生成的自然值

Scala Slick 2 加入多个领域?

scala - 单例对象的类参数(泛型)

postgresql - 在 Slick 中添加评论

scala - 在 Kotlin 中实现 onComplete Scala Future

scala - 在 Scala 2.11+ 中如何准确地使用单例类型作为类型证据?

haskell - 惯用的 bool 相等用法(单例)

haskell - 我可以让 KnownNat n 来暗示 KnownNat (n * 3) 等吗?

java - 使用 Spark 通过 where 子句读取 HBase 表