Правила для голых слов - PullRequest
       9

Правила для голых слов

0 голосов
/ 30 декабря 2018

Barewords можно использовать с левой стороны от Pair объявлений (это еще не задокументировано, я сейчас решаю эту проблему , но я хочу все сделать правильно).Однако я нигде не нашел того, что есть и что не будет считаться ключом без слов.

Кажется, это работает

say (foo'bar-baz => 3); # OUTPUT: «foo'bar-baz => 3␤»

Это не

say (foo-3 => 3); # OUTPUT: «(exit code 1) ===SORRY!=== Error while compiling /tmp/jorTNuKH9V␤Undeclared routine:␤    foo used at line 1␤␤»

Так что, очевидно, он следует тому же синтаксису, что и обычные идентификаторы .Это верно?Я что-то здесь упускаю?

1 Ответ

0 голосов
/ 30 декабря 2018

В Perl 6 нет голых слов в том смысле, что они существуют в Perl 5, и этот термин вообще не используется в Perl 6.

Есть два случая, которые мы могли бы назвать «голыми»identifier ":

  1. Идентификатор, за которым сразу следуют ноль или более горизонтальных пробельных символов (\h*), за которыми следуют символы =>.Принимается идентификатор слева в качестве ключа пары, а термин, проанализированный после =>, в качестве значения пары.Это полностью синтаксическое решение;например, наличие элемента sub или типа с этим идентификатором не окажет никакого влияния.
  2. Идентификатор, за которым следует пробел (или какой-либо другой разделитель или терминатор операторов).Если тип имени уже существует, то он компилируется в ссылку на объект типа.В противном случае он всегда будет приниматься как дополнительный вызов.Если никакое подчиненное объявление с таким именем еще не существует, оно будет считаться обращением к объявленному подчиненному элементу, и будет произведена ошибка во время CHECK, если подпрограмма с таким именем не будет объявлена ​​позднее.

Эти два случая связаны только в том смысле, что они оба являются term s в грамматике Perl 6, и что они оба стремятся проанализировать identifier, которые следуют стандартным правилам, связанным ввопрос .Какой выигрыш определяется семантикой Longest Token Matching;существует ограничение на наличие только горизонтального пробела между идентификатором и =>, чтобы гарантировать, что идентификатор, пробел и => будут вместе считаться декларативным префиксом, и поэтому случай 1 всегда будет преобладать над случаем 2.

...