Мне было интересно, есть ли способ условно исключить блок кода из компиляции в Scala с использованием флагов времени компиляции (то есть некоторого грубого эквивалента #define
семейства C). Я знаю, что нет прямого аналога, и я не думаю, что макросы Scala - это то, что мне нужно, поэтому мне было интересно, есть ли другой способ сделать это.
В моем текущем случае (и я привожу это только в качестве примера, потому что в прошлом у меня были другие случаи, которые вызывали тот же вопрос), я создаю библиотеку на ScalaJS. Библиотека является интерфейсным компонентом и в основном будет использоваться моим приложением, которое также использует ScalaJS. Однако я хотел бы позволить этому компоненту вызываться собственным Javascript в других проектах, которые не используют ScalaJS. Таким образом, я хочу иметь настраиваемый пользователем флаг, который будет переключать экспорт символов в собственный Javascript по запросу.
Нет смысла экспортировать эти флаги по умолчанию (в моем приложении), поскольку единственный другой код, вызывающий их, будет другим кодом ScalaJS, и поэтому накладные расходы на экспортируемые символы бессмысленны. Поддержание двух отдельных веток кода для чего-то столь тривиального тоже кажется бесполезным.
Это в основном то, что я имел в виду (конечно, псевдокод):
...
#if JS_EXPORT
@JSExport
#endif
case class componentProps(
#if JS_EXPORT
@(JSExport @field)
#endif
val propertyOne: Int
#if JS_EXPORT
@(JSExport @field)
#endif
val propertyTwo: String
)
...
Мне хорошо известно, что препроцессора нет, и приведенное выше предназначено только как псевдокод. Мне просто интересно, есть ли способ добиться чего-то подобного без лишних накладных расходов, таких как использование отражения (потому что я уверен, что это приведет к большему снижению производительности, чем простой экспорт по умолчанию).
Кроме того, мне удалось найти этот вопрос: Условная компиляция в Scala. Но это не то, что мне нужно.
sourceGenerator
. - person sjrd   schedule 06.12.2015#default
: stackoverflow.com/questions/8388952/ - person 余杰水   schedule 08.12.2015