Ограничения, по-видимому, не используются для выбора одного в 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 );
печать содержимого самой программы.Возможно, это что-то говорит о проверке типов и множественном планировании, но я не уверен, что это дизайн или это просто странность.Есть идеи?