On 09/12/2018 12:19 AM, Simon Proctor wrote:
In answer to "why the : between Str:D and Cool:D and why Int(Cool:D) ?" can I just point out the video I linked (or the slides) which answer both of these questions.

Hi Simon,

Larry Wall, who has a unique gift for making the complex
easy, explained it to me this way:

     On 09/12/2018 10:34 AM, Larry Wall wrote:

     That is the wrong direction to think about it.  Int is not
     being redefined as Cool:D there.  The basic type there is
     just Int, and when the $pos comes in, it will end up being
     a simple Int.  This syntax is called a "coercion type", and
     it just says that we can also accept anything that matches
     Cool:D and turn it into an Int.  But the inside of the
     method knows nothing about the Cool:D part.

     Think of Int(Cool:D) as the signature matcher automatically
     applying the normal Int($coolthing) coercer for you to
     make sure you have an Int, precisely so that you *don't*
     have to worry about the Cool:D part inside the routine,
     but know that it simply an Int for any part of the routine
     after the signature.


multi method contains(Str:D: Cool:D $needle, Int(Cool:D) $pos) --> Bool

$ p6 'say "abc234.56".contains( 2, "1" );' # Str changed to an Int
True

$ p6 'say "abc234.56".contains( 2, 2.4 );' # Real changed to an Int
True

Reply via email to