gpt4 book ai didi

scala - Scala 代码块的条件编译

转载 作者:行者123 更新时间:2023-12-04 01:23:44 24 4
gpt4 key购买 nike

我想知道是否有一种方法可以使用编译时标志(即 C 系列的 #define 的一些粗略等价物)有条件地排除代码块在 Scala 中编译。我知道没有直接的对应物,而且我认为 Scala 的宏不是我所需要的,所以我想知道是否有另一种方法可以做到这一点。

特别是在我当前的案例中(我只是作为一个例子提供这个,因为我过去有其他案例提示过同样的问题),我正在用 ScalaJS 构建一个库。该库是一个前端组件,主要由我的应用程序使用——它也使用 ScalaJS。但是,我希望在其他不使用 ScalaJS 的项目中允许 native Javascript 调用此组件。因此,我想要一个用户可配置的标志,该标志将根据请求将符号导出到 native 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
)

...

我很清楚没有预处理器,上面的代码只是伪代码。我只是想知道是否有一种方法可以完成类似的事情,而无需使用反射等不必要的开销(因为我确信这会比默认情况下仅导出更大的性能影响)。

此外,我还找到了这个问题:Conditional compilation in Scala .但这不是我需要的。

最佳答案

在源代码中没有任何方法不是完全破解。

JVM/JS双项目的标准做法是尽量减少源文件的数量差异,手工完成(李浩一的项目几乎都是这样--看结构例如 fastparse);或拥有两个具有两个变体的 git 分支,并将所有更改从一个变体合并到另一个变体。

关于scala - Scala 代码块的条件编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34112980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com