perl6.suОсвоим perl6 к 2015 году!

nota LXVII. $a ~~ 8


       Нам предстоит ещё долго разбираться со smart matching, который обозначается двумя тильдами. Мы уже пробовали поиск ~~ m//. А что делают две тильды в чистом виде?
    
#!/usr/bin/perl6
my $a=8;
say $a ~~ 8;
$a=7;
say $a ~~ 8;
$a=78;
say $a ~~ 8;
$a=8;
say $a ~~ '8';
$a='perl8.su';
say $a ~~ '8';
$a='perl6.su';
say $a ~~ '8';
True
False
False
True
False
False

       А теперь почти то же самое, но без переменных.
    
#!/usr/bin/perl6
say 8 ~~ 8;
say 7 ~~ 8;
say 78 ~~ 8;
say 8 ~~ '8';
say '8' ~~ 8;
say 'perl8.su' ~~ '8';
say 'perl6.su' ~~ '8';
True
False
False
True
True
False
False

       Ergo в простом виде, без модификаторов, ~~ работает как простое сравнение вроде == или eq, но не обращающее внимание на тип данных.
       В "Using perl 6" написано, что $answer ~~ 42 это то же самое, что 42.ACCEPTS($answer).
    
#!/usr/bin/perl6
my $answer=42;
say $answer ~~ 42;
say 42.ACCEPTS($answer);
True
True

       Надо же, и в самом деле существует загадочный метод ACCEPTS. Видимо, он отвечает на вопрос: принимает ли объект 42 объект $answer.
# mutatio postrema: 30 Jan 2012

   ~~      charta situs       nota LXVI <<     >> nota LXVIII   

    RSS     stdin@perl6.su    © Alexius Karmanov, 2010-2011