因此,从文档中可以清楚地了解标题中的三个实体是什么,但目的并不是很明确。
常量在许多语言中很常见。你不想在你的代码中编写3.14
,这就是为什么你定义一个常量PI
,根据它代表的东西的性质,它不能被改变,这就是为什么它的值在时间上是恒定的。
使用:=
定义绑定到另一个实体的变量也几乎是清楚但不是真的。如果我将变量绑定到3.14
,是不是与定义PI
常量相同? $a := $b
实际上是将$a
定义为$b
的别名,还是像其他一些语言所称的那样引用?此外,在某些语言中通常使用引用,以便在对象构造或函数调用中清楚地表明您不希望复制对象,但为什么在相同的范围内使用它们会有用呢?
$number_of_cakes = 4;
$also_the_number_of_cakes := $number_of_cakes;
?
最后,文档解释了如何定义一个无法变量(不能改变,实际上,另一种常量)但不是为什么会这样做。无意义变量解决了哪些问题?当一个变量,一个常量,一个绑定变量无法解决一个无形变量解决的问题时,实际情况是什么?
常量在许多语言中很常见。您不希望在代码中编写3.14,这就是为什么要定义一个常量PI,根据它所代表的东西的性质,它不能被改变,这就是为什么它的值在时间上是恒定的。
为此,你使用constant
。
constant
仅在编译期间首次遇到时初始化一次,并且从不再次初始化,因此其值在整个程序运行期间保持不变。编译器可以依赖它。读者也是如此 - 只要他们清楚地理解“价值”在这种情况下意味着什么
例如:
BEGIN my $bar = 42;
loop {
constant foo = $bar;
$bar++;
last if $++ > 4;
print foo; # 4242424242
}
请注意,如果您没有BEGIN
,那么常量将被初始化并被卡住(Any)
的值。
我倾向于放弃这个印记,有点强调它是一个恒定的想法,但如果你愿意,你可以使用一个印记。
使用
:=
定义绑定到另一个实体的变量也几乎是清楚但不是真的。如果我将变量绑定到3.14
,是不是与定义PI
常量相同?$a := $b
实际上是将$a
定义为$b
的别名,还是像其他一些语言所称的那样引用?
绑定只是绑定标识符。如果有任何变化,他们都会:
my $a = 42;
my $b := $a;
$a++;
$b++;
say $a, $b; # 4444
最后,文档解释了如何定义一个无法变量(不能改变,实际上,另一种常量)但不是为什么会这样做。
如果绑定的东西是变量,它可以变化。例如:
my $variable = 42; # puts the value 42 INTO $variable
my \variable = $variable; # binds variable to $variable
say ++variable; # 43
my \variable2 = 42; # binds variable2 to 42
say ++variable2; # Cannot resolve caller prefix:<++>(Int:D);
# ... candidates ... require mutable arguments
如果标识符绑定到不可变的基本标量值(例如42
)或其他完全不可变的值(例如典型的List
),我个人更喜欢削减符号,否则使用sigil。因人而异。
无意义变量解决了哪些问题?当一个变量,一个常量,一个绑定变量无法解决一个无形变量解决的问题时,实际情况是什么?
请添加评论,如果我的答案中已有的内容(或其他内容;我看到其他人发布了一个内容),请留下您剩下的问题。
1见my answer to JJ's SO about use of constant
with composite containers。
这不是一个而是5个问题?
如果我将变量绑定到3.14,是否与定义PI常量相同?
好吧,从技术上来说,除了3.14
是Rat
,而pi
(又名π
)是Num
这一事实。
是$ a:= $ b实际上将$ a定义为$ b的别名,或者正如其他一些语言所称的那样,是一个引用?
这是别名。
$ number_of_cakes = 4; $ also_the_number_of_cakes:= $ number_of_cakes;
没有什么意义。但是,有时可以方便地将某些内容替换为数组中的元素或散列中的键,以防止重复查找:
my %foo;
my $bar := %foo<bar>;
++$bar for ^10;
无意义变量解决了哪些问题?
据我所知,Sigilless变量只能解决编程风格问题。无论出于何种原因,有些人更喜欢无瑕疵的变体。它使插值更难,但其他人可能会发现额外的curlies实际上是一件好事:
my answer := my $ = 42;
say "The answer is {answer}";
当一个变量,一个常量,一个绑定变量无法解决一个无形变量解决的问题时,实际情况是什么?
在我看来,无意识的变量不能解决问题,而是尝试迎合不同的编程风格。所以我不确定这个问题的正确答案是什么。
constant
也是默认的our
,而不是根据文档确定的my
。