2017-07-14 7 views
4

インタプリタでの引数の構文でいくつかの矛盾があるようです。私は最新のRakudoを使用しています。あなたが引数を指定し、「:」または「()」を使用した後、あなたは「」を使用するために戻って行くことができないようですPerl 6の関数の引数の構文(REPL)

$ perl6 
To exit type 'exit' or '^D' 
> say: "foo" 
foo 
> say("foo") 
foo 
> say "foo" 
===SORRY!=== Error while compiling: 
Two terms in a row 
------> say⏏ "foo" 
    expecting any of: 
     infix 
     infix stopper 
     statement end 
     statement modifier 
     statement modifier loop 
> 
$ perl6 
To exit type 'exit' or '^D' 
> say "foo" 
foo 
> say("foo") 
foo 
> say: "foo" 
foo 
> say "foo" 
===SORRY!=== Error while compiling: 
Two terms in a row 
------> say⏏ "foo" 
    expecting any of: 
     infix 
     infix stopper 
     statement end 
     statement modifier 
     statement modifier loop 
> 
$ 

、すなわち、スペース、供給して次の端子の出力を参照してください。議論

または私は何かを逃したのですか?

ありがとうございました!

lisprog

+0

Iは前に同様のミス(参照[方法及び機能のコロンの使用はPerl 6の中のコール(https://stackoverflow.com/questions/30982697/use-of-colon-in-method-and-functionを作っ-calls-in-perl-6)) –

答えて

9

say: "foo"

その行がないコールsayサブルーチンを行います。

代わりにsayという名前のstatement labelを宣言してから、文"foo"(何もしません)を実行します。

"foo"を印刷した唯一の理由は、各行の最後の文の値を自動的に印刷するREPLに入力したためです。あなたが通常のプログラムでそれを使用していた場合

、それは実際に警告Useless use of constant string "foo" in sink contextを投げているだろう。

say "foo" ===SORRY!=== Error while compiling: Two terms in a row ------> say⏏ "foo" expecting any of: infix infix stopper statement end statement modifier statement modifier loop

ラベルを宣言した後、この範囲内のシンボルsayは、もはやその名前の組み込みのサブルーチンにではなく、カスタムラベルを意味しない、それがありますそのようなラベルを使用するには構文エラーです。

エラーメッセージは、理想的には、しかし、それを説明する必要があります。私はsubmitted a Rakudo ticketです。

+0

私は見る!ありがとう!いつも何か – lisprogtor

+1

ごめんなさい。 "foo"がラベルを作成する場合、perl6のドキュメントhttps://docs.perl6.org/routine/mapのこの構文については、メソッドマップの後に ":"と表示されます---> say ( 'hello'、1 22/7、42、 'world')map:{.WHAT.perl}#出力:«(Str Int Rat Int Str)»;私はマップと同じ構文を試していた。 ":"とラベルを ":"から区別して引数を呼び出す方法ありがとう。 – lisprogtor

+1

@lisprogtor:ステートメント**(空白を数えない)の先頭にコロンが続く単語**がある場合は、ラベル宣言にすぎません。 – smls