我正在使用依賴於Scala 2.9的庫,但僅用於次要功能。我想提出與2.8兼容的版本,但我不想維護兩個代碼分支。由於我使用的是SBT,我想從中獲益交叉編譯功能。Scala中的條件編譯
但是我不知道是否有一種方法可以提供等價的條件編譯,只有在使用Scala 2.9時才包含一段代碼。反思可能是一種選擇(但是如何?)。
編輯:我在2.9中使用的功能是新的sys
包對象。
我正在使用依賴於Scala 2.9的庫,但僅用於次要功能。我想提出與2.8兼容的版本,但我不想維護兩個代碼分支。由於我使用的是SBT,我想從中獲益交叉編譯功能。Scala中的條件編譯
但是我不知道是否有一種方法可以提供等價的條件編譯,只有在使用Scala 2.9時才包含一段代碼。反思可能是一種選擇(但是如何?)。
編輯:我在2.9中使用的功能是新的sys
包對象。
我反思了它。所以,如果我想要得到的sys.SystemProperties
,我可以這樣做:
try {
val k = java.lang.Class.forName("scala.sys.package$")
val m = k.getMethod("props")
// etc.
} catch {
case _ => throw new UnsupportedOperationException("Only available with Scala 2.9")
}
但它是如此的乏味和醜陋,我想我會丟棄這些功能...
閱讀這篇博客文章,其中介紹瞭如何用元編程做:
留言Merci!但是因爲我引用了Scala 2.8中不存在的代碼(參見編輯),所以它不會編譯。 – paradigmatic
哦。事實上,它不會使用這種技術... –
你不應該抓住像'NoSuchMethodException'這樣的東西嗎? –
我抓住了一切,因爲所有的反思步驟都可能導致拋出異常。 – paradigmatic
夠公平的。當做這種事情時,我通常會打開InvocationTargetException來使其更透明。 –