Атрибут класса без знака - PullRequest
4 голосов
/ 04 ноября 2019

Хотя на самом деле вы можете элементизировать любую структуру данных, чтобы поместить ее в скалярную переменную, переменные без сигилов могут иметь некоторое внутреннее значение, поскольку они на самом деле бесформенные для использованиякак атрибуты класса. Однако, похоже, что сделать это невозможно, has \.a не работает, has .\a тоже. has $!a, вероятно, может покрыть большую часть того, что мы могли бы достичь с помощью переменных без сигилов, но будет ли реальный способ использовать их в качестве атрибутов?

1 Ответ

9 голосов
/ 04 ноября 2019

В настоящее время нет способа иметь атрибут без сигилла. Кроме того, насколько я знаю, в настоящее время активно рассматривается вопрос о включении в будущую версию Raku. Наиболее очевидные конструктивные соображения, если бы они были предложены, были бы:

  1. Семантика my \foo = ... - это одиночное статическое назначение. Понятно, что это означает для лексически ограниченного символа. Менее понятно, что это будет означать в объявлении класса и как оно будет взаимодействовать с рабочим процессом создания экземпляров. Например, не было бы эквивалента синтаксиса подписи :$!foo, который может быть удобен в BUILD / TWEAK.
  2. Использование twigil подразумевает, что он следует за сигилом. Твиги без этого потенциально неоднозначны, в зависимости от контекста. Кроме того, было бы странно разрешить регистр . только для того, чтобы объявить, что мы хотим, чтобы атрибут без сигилов получил метод доступа.
  3. Это нарушило бы правило, согласно которому вы всегда можете найти доступ ксостояние экземпляра, ища ! веточку, что было бы жалко.
...