2017-02-17 21 views
5

Poniższy kod jest pobierana z perl6 tutorialu stronie, a ja staram się dowiedzieć więcej na ten temat, zanim więcej eksperymentów:perl6 potrzebują pomocy, aby zrozumieć więcej o proto regex/tokena/reguły

proto token command {*} 
     token command:sym<create> { <sym> } 
     token command:sym<retrieve> { <sym> } 
     token command:sym<update> { <sym> } 
     token command:sym<delete> { <sym> } 
  1. Czy * w pierwszej linii jest dowolną gwiazdką? Może to być coś innego, takich jak

    proto token command { /give me an apple/ } 
    
  2. może "sym" być coś innego, takich jak

    command:eat<apple> { <eat> } ? 
    

Odpowiedz

7

{*} informuje środowisko wykonawcze, aby zadzwonić do prawidłowego kandydata.
Zamiast zmuszać do pisania {{*}} dla wspólnego przypadku wystarczy zadzwonić poprawny, kompilator pozwala to skrócić do zaledwie {*}

jest to sprawa dla wszystkich proto rutyny jak sub, method, regex, token i rule.

W przypadku procedur protokołów regex dozwolone jest tylko nagie {*}.
Głównym powodem jest prawdopodobnie dlatego, że nikt nie wymyślił dobrego sposobu, aby działał on sensownie w podfolderze regex.

Oto przykład z proto sub, który robi pewne rzeczy, które są wspólne dla wszystkich kandydatów.

#! /usr/bin/env perl6 
use v6.c; 
for @*ARGS { $_ = '--stdin' when '-' } 

# find out the number of bytes 
proto sub MAIN (|) { 
    try { 
    # {*} calls the correct multi 
    # then we get the number of elems from its result 
    # and try to say it 
    say {*}.elems #   <------------- 
    } 
    # if {*} returns a Failure note the error message to $*ERR 
    or note $!.message; 
} 

#| the number of bytes on the clipboard 
multi sub MAIN() { 
    xclip 
} 

#| the number of bytes in a file 
multi sub MAIN (Str $filename){ 
    $filename.IO.slurp(:!chomp,:bin) 
} 

#| the number of bytes from stdin 
multi sub MAIN (Bool :stdin($)!){ 
    $*IN.slurp-rest(:bin) 
} 

sub xclip() { 
    run(«xclip -o», :out) 
    .out.slurp-rest(:bin, :close); 
} 
+0

Dziękuję bardzo Brad Gilbert !! – lisprogtor