Условная компиляция в Scala - PullRequest
6 голосов
/ 05 июля 2011

Я работаю над библиотекой, которая зависит от Scala 2.9, но только для незначительной функции. Я хотел бы предложить версию, совместимую с 2.8, но я не хочу поддерживать две ветви кода. Поскольку я использую SBT, я бы хотел воспользоваться возможностями кросс-компиляции.

Однако я не знаю, есть ли способ предоставить эквивалент условной компиляции, включить фрагмент кода, только если используется Scala 2.9. Рефлексивность может быть вариантом (но как?).

Редактировать: Функции, которые я использую в 2.9, - это новый sys объект пакета.

Ответы [ 2 ]

2 голосов
/ 06 июля 2011

Я получил это с отражением.Так что, если я хочу получить 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")
}

Но это так скучно и безобразно, что я думаю, что я отброшу эти функции ...

1 голос
/ 05 июля 2011

Прочтите этот пост в блоге, который описывает, как это сделать с помощью метапрограммирования:

http://michid.wordpress.com/2008/10/29/meta-programming-with-scala-conditional-compilation-and-loop-unrolling/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...