Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何只创建一次常量_Scala_Macros_Scala Macros - Fatal编程技术网

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中是可行的?

在编译时进行计算对您来说有多重要?如果不重要,您可以使用运行时缓存系统。重要的是在比宏扩展更高的范围内创建对象。创建常量只是一个例子,不是要解决或解决的问题。对于宏生成的顶级对象,还有许多其他应用程序:全局缓存,可以在运行时进行缓存。据我所知,宏的作用是进行本地代码转换,因此我怀疑这样的全局修改是不可能的。我猜这个技巧可以由宏+注释处理器完成,它可以生成一个新文件