2011-07-05 31 views
6

Estoy trabajando en una biblioteca que depende de Scala 2.9 pero solo para una característica menor. Me gustaría proponer una versión compatible con 2.8, pero no quiero mantener dos ramas de código. Ya que estoy usando SBT, me gustaría aprovechar las características de compilación cruzada.Compilación condicional en Scala

Sin embargo, no sé si hay una forma de proporcionar un equivalente de compilación condicional, para incluir un fragmento de código solo si se usa Scala 2.9. La reflexividad podría ser una opción (¿pero cómo?).

Edit: Las características que estoy utilizando en 2.9 son el nuevo objeto de paquete sys.

Respuesta

2

lo tengo con la reflexión. Así que si quiero conseguir el sys.SystemProperties, no puedo hacer:

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") 
} 

pero es tan aburrido y feo que yo creo que vuelva a caer esas características ...

+0

¿No debería atrapar cosas como 'NoSuchMethodException'? –

+0

Capturo todo porque todos los pasos de reflexión pueden dar lugar a excepciones. – paradigmatic

+0

Bastante justo. Cuando hago ese tipo de cosas, generalmente desenvuelvo 'InvocationTargetException's para hacerlo más transparente. –

Cuestiones relacionadas