【发布时间】:2011-07-05 08:14:47
【问题描述】:
我正在开发一个依赖于 Scala 2.9 但仅用于次要功能的库。我想提出与 2.8 兼容的版本,但我不想维护两个代码分支。由于我使用的是 SBT,我想从它的交叉编译功能中受益。
但是我不知道是否有一种方法可以提供等效的条件编译,仅在使用 Scala 2.9 时才包含一段代码。反射性可能是一种选择(但如何?)。
编辑:我在 2.9 中使用的功能是新的 sys 包对象。
【问题讨论】:
我正在开发一个依赖于 Scala 2.9 但仅用于次要功能的库。我想提出与 2.8 兼容的版本,但我不想维护两个代码分支。由于我使用的是 SBT,我想从它的交叉编译功能中受益。
但是我不知道是否有一种方法可以提供等效的条件编译,仅在使用 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")
}
但它是如此无聊和丑陋,我想我会放弃那些功能......
【讨论】:
NoSuchMethodException这样的东西吗?
InvocationTargetExceptions 以使其更透明。
【讨论】: