相关疑难解决方法(0)

为什么String文字符合Scala Singleton

明智与否,我正在编写一种方法,我只想接受Scala单例,即通过"对象"实现的对象,而不是类或特性的构造实例.它应该接受任何类型的Scala单例,因此"MySingleton.type"不会这样做.

我遇到了一个非常奇怪的构造"scala.Singleton",它没有在api文档中记录,但似乎可以解决这个问题:

scala> def check( obj : Singleton ) = obj
check: (obj: Singleton)Singleton

scala> check( Predef )
res0: Singleton = scala.Predef$@4d3e9963

scala> check ( new java.lang.Object() )
<console>:9: error: type mismatch;
 found   : java.lang.Object
 required: Singleton
              check ( new java.lang.Object() )

scala> check( Map )
res3: Singleton = scala.collection.immutable.Map$@6808aa2d

scala> check( Map.empty[Any,Any] )
<console>:9: error: type mismatch;
 found   : scala.collection.immutable.Map[Any,Any]
 required: Singleton
              check( Map.empty[Any,Any] )
Run Code Online (Sandbox Code Playgroud)

但是,相当莫名其妙地(对我来说),字符串文字被接受为单例,而显式构造的字符串不是:

scala> check( "foo" )
res7: Singleton = foo

scala> check( new String("foo") ) …
Run Code Online (Sandbox Code Playgroud)

scala

8
推荐指数
2
解决办法
755
查看次数

标签 统计

scala ×1