2016-03-15 61 views

回答

22

是的,使用小記錄scala.Singleton類型:

def isSingleton[A](a: A)(implicit ev: A <:< Singleton = null) = 
    Option(ev).isDefined 

然後:

scala> val X = new Foo(10) 
X: Foo = [email protected] 

scala> object Y extends Foo(11) 
defined object Y 

scala> isSingleton(X) 
res0: Boolean = false 

scala> isSingleton(Y) 
res1: Boolean = true 

isSingleton方法僅僅是提供了一個運行時布爾值,它會告訴你是否示範表達式是靜態類型爲單例類型,但是您也可以在編譯時使用Singleton作爲證據,表明類型是單例類型。

+0

爲什麼不使用'EV NE null',而不是'個選項(EV).isDefined'? – Clashsoft

+0

@Clashsoft沒有特別的理由。 'null'默認值是一種黑客行爲,因爲它不是真正的重點,我只是想盡可能保持原則。 –

+0

另外,你確定'scala.Singleton'(仍然)存在嗎?它不在'2.11'文檔中,也不能在GitHub庫中找到?也許你可以添加一個鏈接 – Clashsoft

相關問題