Ограничивающий мультис и его использование для их выбора - PullRequest
0 голосов
/ 14 декабря 2018

Ограничения, по-видимому, не используются для выбора одного в multi

multi sub cuenta( Str $str ) { say $str };
multi sub cuenta( $file where .IO.e ) { say $file.IO.slurp };
cuenta( $*PROGRAM-NAME ); # Outputs the file name

Это означает, что используется первый мульти, а не второй.Тем не менее, это работает как задумано:

subset real-files of Str where .IO.e;
multi sub cuenta( Str $str ) { say $str };
multi sub cuenta( real-files $file ) { say $file.IO.slurp };
cuenta( $*PROGRAM-NAME );

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

1 Ответ

0 голосов
/ 14 декабря 2018
multi sub cuenta( Str $str ) { say $str };
multi sub cuenta( Str $file where .IO.e ) { say $file.IO.slurp };
                # ^^^
cuenta( $*PROGRAM-NAME ); # Outputs the file

subset real-files        where .IO.e;
                # ^^^^^^
multi sub cuenta( Str $str ) { say $str };
multi sub cuenta( real-files $file ) { say $file.IO.slurp };
cuenta( $*PROGRAM-NAME ); # Outputs the file name

Сначала проверяется базовый тип параметра, чтобы установить кандидатов.Только самые узкие совпадающие мультисети являются кандидатами для отправки.Ограничение where применяется только в том случае, если имеется несколько подходящих кандидатов с одинаковым базовым типом.Если не указано, базовый тип параметра или subset равен Any.

Это задано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...