gpt4 book ai didi

scala - 如何检查值是否是没有静态类型的 Scala 单例对象?

转载 作者:行者123 更新时间:2023-12-04 13:42:43 24 4
gpt4 key购买 nike

In scala, is there any way to check if an instance is a singleton object or not?的答案解释如何检查实例是否静态已知为 object .换句话说,它不适用于这种情况:

object Obj
val x: Any = Obj
isSingleton(x)

或者甚至在这里:
trait Trait // not sealed
case Obj extends Trait
class Class extends Trait
val xs: Seq[Trait] = ...
xs.filter(isSingleton)

不幸的是,我想处理这个。有没有好的方法可以做到这一点?或者至少比 x.getClass.getName.endsWith("$") 更好?

最佳答案

如果你的意思是“singleton”就像“Scala伴侣”一样,那么你可以使用这样的东西:

def isSingleton(x: Any): Boolean = {
x.getClass.getFields.map(_.getName) contains "MODULE$"
}

没有比检查好多少 x.getClass.getName.endsWith("$") ,但还是。例如:
case class Foo(x: Int)
object Foo

trait Trait // not sealed
object Obj extends Trait
class Class extends Trait

val xs = Seq(42, Obj, "okey", Foo(43), Foo, new Trait {}, (x: Int) ⇒ x * x)
println(xs map isSingleton)
// prints: List(false, true, false, false, true, false, false)

关于scala - 如何检查值是否是没有静态类型的 Scala 单例对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37388677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com