Макрос аннотации сгенерированного метода применения сопутствующего класса не разрешен - PullRequest
0 голосов
/ 10 мая 2019

Я написал процессор макросов для аннотаций, который генерирует все те же методы, которые вы получили бы при объявлении класса case, но обеспечивающий хеш-обработку. Это было немного сложно, но в целом я очень доволен результатами. Тем не менее, я вижу некоторое поведение в отношении метода apply, который мне еще предстоит решить.

Раньше, когда класс Foo был классом дела или имел метод apply, определенный вручную, я мог написать код, подобный foos.map(Foo). Однако теперь, когда метод сгенерирован макропроцессором, он выдаст сообщение об ошибке, подобное следующему

type mismatch;
[error]  found   : Foo.type
[error]  required: String => ?

Теперь я могу просто переписать код как foos.map(Foo.apply) или foos.map(Foo(_)), и он будет работать, но я не смог разглядеть какую-либо разницу в генерируемом коде, которая могла бы вызвать эту разницу в поведении.

Я подозреваю, что это что-то вроде компилятора Scala, который слишком охотно разрешает символ в имени типа, а не в имени объекта или чем-то подобном, но если есть способ сделать это лучше, было бы полезно знать.

1 Ответ

1 голос
/ 11 мая 2019

Как отметили @ LuisMiguelMejíaSuárez и @DmytroMitin, мой критический упущение заключается в том, что (большинство) сопутствующие объекты класса case наследуются от класса FunctionN.Добавление этого к родителям нового или существующего сопутствующего объекта решит проблему.

...