Ошибка документации документации [RAKU] - PullRequest
5 голосов
/ 14 января 2020

В документации raku для класса Slip (https://docs.raku.org/type/Slip), а также в документации "Списки, последовательности и массивы" (раздел проскальзываний: https://docs.raku.org/language/list) указано что "слип", "слип (метод)" и "| (префикс)" могут использоваться для создания слипов, но они ведут себя немного"по-разному".

Дело в том, что я ' мы пытались подтвердить приведенное выше утверждение, но с разочаровывающими результатами.

Я запускаю следующие тесты, чтобы выяснить различия:

my $l = (1, 2, 3);

say (0, slip($l, 4)).perl;
say (0, ($l, 4).Slip).perl;
say (0, |($l, 4)).perl;

say '------------------------------';

say (slip($l, 4)).perl;
say (($l, 4).Slip).perl;
say (|($l, 4)).perl;

say '------------------------------';

say (0, slip($l)).perl;
say (0, ($l).Slip).perl;
say (0, |($l)).perl;

say '------------------------------';

say (0, slip $l).perl;
say (0, $l.Slip).perl;
say (0, |$l).perl;

say '------------------------------';

say (slip $l).perl;
say ($l.Slip).perl;
say (|$l).perl;

и результаты одинаковы для всех трех из них:

(0, $(1, 2, 3), 4)
(0, $(1, 2, 3), 4)
(0, $(1, 2, 3), 4)
------------------------------
slip($(1, 2, 3), 4)
slip($(1, 2, 3), 4)
slip($(1, 2, 3), 4)
------------------------------
(0, 1, 2, 3)
(0, 1, 2, 3)
(0, 1, 2, 3)
------------------------------
(0, 1, 2, 3)
(0, 1, 2, 3)
(0, 1, 2, 3)
------------------------------
slip(1, 2, 3)
slip(1, 2, 3)
slip(1, 2, 3)

Есть подвох или это ошибка документации?

1 Ответ

4 голосов
/ 14 января 2020

Чуть дальше вниз по документам вы найдете пример разницы (a?):

Обратите внимание, что префикс: <|> также будет применять параметры скользким образом к процедуре вызов. Он не передает скольжение в вызываемую подпрограмму, которая включает возврат и взятие.

my \l = gather for 1..10 -> $a, $b { take |($a, $b) }; say l.perl;
# OUTPUT: «((1, 2), (3, 4), (5, 6), (7, 8), (9, 10)).Seq
my \m= gather for 1..10 -> $a, $b { take ($a, $b).Slip }; say m.perl;
# OUTPUT: «(1, 2, 3, 4, 5, 6, 7, 8, 9, 10).Seq
...