因此,从文档中几乎可以清楚看出标题中的三个实体是什么,但不清楚它们的目的是什么。
常数在许多语言中都很常见。您不想编写3.14
所有代码,这就是为什么要定义一个常量PI
,该常量由于其所代表的事物的性质而无法更改,因此其值在时间上是恒定的。
用定义绑定到另一个实体的变量:=
也很清楚,但实际上不是。如果我将变量绑定到3.14
,那么它与定义PI
常量是一样的吗?被$a := $b
实际定义$a
为一个别名来$b
,或者一些其他语言称呼它,一个参考?另外,在某些语言中,引用通常用于在对象构造或函数调用中明确表示您不想复制对象,但是为什么在相同范围内使用它也很有用
$number_of_cakes = 4;
$also_the_number_of_cakes := $number_of_cakes;
Run Code Online (Sandbox Code Playgroud)
?
最后,文档说明了如何定义无符号变量(不能改变,因此实际上是另一种常量),但没有解释为什么要这样做。无符号变量可解决哪些问题?当变量,常量,绑定变量不能解决无符号变量解决的问题时,实际情况是什么?
rai*_*iph 10
常数在许多语言中都很常见。您不想在整个代码中编写3.14,这就是为什么要定义一个常量PI,而该常量由于其所代表的事物的性质而不能更改,因此其值在时间上是恒定的。
为此,您使用constant
。
A constant
在编译期间首次遇到时仅初始化一次,而不会再次初始化,因此其值在程序运行期间保持恒定。编译器可以依靠它。只要读者清楚地了解“价值”在这种情况下的含义,读者也可以。1个
例如:
BEGIN my $bar = 42;
loop {
constant foo = $bar;
$bar++;
last if $++ > 4;
print foo; # 4242424242
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您没有,BEGIN
则常量将被初始化并停留在的值上(Any)
。
我倾向于不使用印记,以在某种程度上加强它是常数的想法,但是如果您愿意,可以使用印记。
用定义绑定到另一个实体的变量
:=
也很清楚,但实际上不是。如果我将变量绑定到3.14
,那么它与定义PI
常量是一样的吗?被$a := $b
实际定义$a
为一个别名$b
,或其他一些语言称呼它,一个参考?
绑定只是绑定标识符。如果其中一项发生更改,则它们都会:
my $a = 42;
my $b := $a;
$a++;
$b++;
say $a, $b; # 4444
Run Code Online (Sandbox Code Playgroud)
最后,文档说明了如何定义无符号变量(不能改变,因此实际上是另一种常量),但没有解释为什么要这样做。
如果绑定的事物是变量,则可以变化。例如:
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
Run Code Online (Sandbox Code Playgroud)
如果标识符绑定到不可变的基本标量值(例如42
)或其他完全不可变的值(例如,典型值List
),我个人更喜欢用斜线标记,否则使用sigil。YMMV。
无符号变量可解决哪些问题?当变量,常量,绑定变量不能解决无符号变量解决的问题时,实际情况是什么?
如果我的答案(或其他内容;我看到其他人已发布了一个内容)给您留下了其他问题,请添加评论。
1请参阅我对JJ的SO有关如何constant
与复合容器一起使用的回答。
那不是一个问题,而是五个问题?
如果我将变量绑定到3.14,这与定义PI常数是否相同?
嗯,从技术上讲,除了事实3.14
是a Rat
和pi
(aka ?
)是a之外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;
Run Code Online (Sandbox Code Playgroud)
无符号变量可解决哪些问题?
据我所知,无Sigil变量只能解决编程风格的问题。无论出于何种原因,有些人都喜欢无印记的物品。这使得插值变得更加困难,但是其他人可能会发现多余的小包实际上是一件好事:
my answer := my $ = 42;
say "The answer is {answer}";
Run Code Online (Sandbox Code Playgroud)
当变量,常量,绑定变量不能解决无符号变量解决的问题时,实际情况是什么?
在我看来,无符号变量不会解决问题,而是尝试迎合不同的编程风格。因此,我不确定该问题的正确答案是什么。