Тривиально написать макрос для преобразования bytes"hello"
в
"hello".getBytes
или Array('h'.getByte, 'o'.getByte, 'l'.getByte, 'l'.getByte, 'o'.getByte)
Проблема здесь в том, что мы не получаем постоянный литерал, т.е.
"hello" eq "hello"
не выполняется для значений, построенных макросами: bytes"hello" ne bytes"hello"
. Существует также недостаток производительности, так как байтовый массив создается много раз.
То, что на самом деле bytes"hello"
должно быть преобразовано, является объектом глобальной области видимости:
object `bytes"hello"` {
val value = Array('h'.getByte, 'o'.getByte, 'l'.getByte, 'l'.getByte, 'o'.getByte)
}
Но похоже, что Scala Macros в своем текущем состоянии не позволяет создавать глобальные объекты.
Я не прав, и это возможно в текущей версии Scala?