什麼是Perl 6的方式來區分沒有明確簽名的塊中的參數和沒有參數?我對此沒有任何實際用途,但我很好奇。這是Perl 6塊的一個參數還是沒有?
沒有明確的簽名塊使價值爲$_
:
my &block := { put "The argument was $_" };
簽名實際上是;; $_? is raw
。這是一個可選的論點。因爲沒有明確的簽名,因此塊中未定義變量@_
。
還有的沒有參數,其中$_
將是不確定的:
&block(); # no argument
但也有地方$_
將是不確定的一個參數的情況。 A型對象總是不確定的:
&block(Int);
但是,什麼也沒有在它的$_
實際上是一個Any(而不是說,Nil)。我不能告訴這兩種情況的區別是:
&block();
&block(Any);
這裏有一個較長的例子:
my $block := {
say "\t.perl is {$_.perl}";
if $_ ~~ Nil {
put "\tArgument is Nil"
}
elsif ! .defined and $_.^name eq 'Any' {
put "\tArgument is an Any type object"
}
elsif $_ ~~ Any {
put "\tArgument is {$_.^name} type object"
}
else {
put "\tArgument is $_";
}
};
put "No argument: "; $block();
put "Empty argument: "; $block(Empty);
put "Nil argument: "; $block(Nil);
put "Any argument: "; $block(Any);
put "Int argument: "; $block(Int);
通知的任何參數和任何參數的形式表現出同樣的事情:
No argument:
.perl is Any
Argument is an Any type object
Empty argument:
.perl is Empty
Argument is Slip type object
Nil argument:
.perl is Nil
Argument is Nil
Any argument:
.perl is Any
Argument is an Any type object
Int argument:
.perl is Int
Argument is Int type object
我知道這一切。我在詢問我把「Any」放進去的情況。 –
@briandfoy如果您需要此信息,請勿使用旨在使差異不可見的功能。 –
這不是我需要它。我正在研究語言是如何工作的,以及它的界限,因此我可以告訴其他人他們無法做到的事情。 –