Как создать кортеж с помощью конструктора внутри макроса в Crystal Lang - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь создать пустой кортеж внутри макроса, но получаю сообщение об ошибке - Ошибка: неопределенный метод макроса 'TypeNode # new'


{% empty_tuple = Tuple.new %}

Вот ссылка на Crystal Play - https://play.crystal-lang.org/# / r / 8mxf

Если я не могу сделать это, скажите, пожалуйста, есть ли альтернатива

Обновление 1

Я пытаюсь инициализировать класс - случаи, когда у какого-то конструктора класса есть аргументы, а у некоторых нет

Так что я подумал об использовании кортежа с splat для передачи аргументов.

Вот ссылка на кристалл воспроизведения того, что я пытаюсь сделать - https://play.crystal-lang.org/# / r / 8n4g

Обновление 2

Вы можете создать кортеж с использованием прямого синтаксиса

args = {1}

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

Итак, я подумал об использовании синтаксиса конструктора - Tuple.new

, но он тоже не работал.

1 Ответ

0 голосов
/ 02 марта 2020

Я пытался создать экземпляр многих классов, используя макрос, и именно поэтому я выбрал этот подход.

Поскольку я не смог создать пустой кортеж в макросе. Я придумал хак - что если я получу аргументы какого-то метода, у которого нет аргументов, что означает, что это будет пустой кортеж, верно?

но это не так, это был пустой массив

И снова я застрял. Поэтому я использовал

, если еще

, чтобы решить эту проблему. По сути, проверьте, нужно ли инициировать класс с помощью аргументов, затем создайте класс и передайте аргументы в конструкторе, иначе инициируйте класс без аргументов.

Надеюсь, это кому-нибудь поможет.

...