Po this post on perlgeek, daje przykład zmiękczania:Kiedy mogę użyć gwiazdki Any?
my &add_two := * + 2;
say add_two(5); # 7
sens. Ale jeśli mogę zamienić operatorowi +
Infix dla operatora min
Infix:
my &min_two := * min 2;
say min_two(5); # Type check failed in binding; expected 'Callable' but got 'Int'
Nawet próby wywołania +
poprzez składni infix
zawiedzie:
>> my &curry := &infix:<+>(2, *);
Method 'Int' not found for invocant of class 'Whatever'
Czy muszę zakwalifikować Cokolwiek jako wartość numeryczna , a jeśli tak, to w jaki sposób? Czy też całkowicie pomijam ten punkt?
[Edytowane z odpowiedziami od nowszego rakudo; Wersja łańcucha dla powyższego: perl6 version 2014.08 built on MoarVM version 2014.08
]
cokolwiek gwiazda i min: ["wygląda na trochę buggy"] (http://irclog.perlgeek.de/perl6/2014-09-04#i_9298954). Re auto priming: 'm: sub foo ($ a, $ b) {say $ a + $ b}; my & bar = & foo.assuming (1); pasek 3' działa dobrze - tzn. działa dla dowolnych funkcji nie tylko operatorów. (W rzeczywistości operatory są po prostu funkcjami o zabawnych "długich" nazwach, np. Operator "+" infix jest również znany jako '& infix: <+>'.) – raiph
@raiph: ale '*' tylko automatyczne wyrażenia operatora: '& infix: <+> (2, *) "przekazuje zamiast tego argument" Cokolwiek "; jawnie za pomocą 'założenia()' nie jest * auto * nic – Christoph
Dodanie '{}' działa dla operatora, ale wywołanie za pomocą 'infix:' analizuje, ale kończy się niepowodzeniem, gdy jest wywoływane z argumentem numerycznym z 'Method 'Int' nie znaleziono dla zapraszający do klasy "Cokolwiek". Naprawdę nie rozumiem, dlaczego operatorzy i funkcje byłyby traktowane inaczej w przypadku curry. –