Scala 如何只创建一次常量
编写宏将Scala 如何只创建一次常量,scala,macros,scala-macros,Scala,Macros,Scala Macros,编写宏将字节“hello”转换为 “hello”.getBytes或数组('h'.getByte'o'.getByte'l'.getByte'o'.getByte) 这里的问题是我们没有得到常量文字,即 “hello”eq“hello”不适用于宏构造的值:字节“hello”ne字节“hello”。由于字节数组被多次不必要地构造,因此也存在性能缺陷 实际上必须转换的字节“hello”是一个全局范围对象: object`bytes“hello”`{ val值=数组('h'.getByte'o'.ge
字节“hello”
转换为
“hello”.getBytes
或数组('h'.getByte'o'.getByte'l'.getByte'o'.getByte)
这里的问题是我们没有得到常量文字,即
“hello”eq“hello”
不适用于宏构造的值:字节“hello”ne字节“hello”
。由于字节数组被多次不必要地构造,因此也存在性能缺陷
实际上必须转换的字节“hello”
是一个全局范围对象:
object`bytes“hello”`{
val值=数组('h'.getByte'o'.getByte'l'.getByte'l'.getByte'o'.getByte)
}
但在当前状态下,Scala宏似乎不允许创建全局对象。
我错了吗?这在当前的Scala中是可行的?在编译时进行计算对您来说有多重要?如果不重要,您可以使用运行时缓存系统。重要的是在比宏扩展更高的范围内创建对象。创建常量只是一个例子,不是要解决或解决的问题。对于宏生成的顶级对象,还有许多其他应用程序:全局缓存,可以在运行时进行缓存。据我所知,宏的作用是进行本地代码转换,因此我怀疑这样的全局修改是不可能的。我猜这个技巧可以由宏+注释处理器完成,它可以生成一个新文件