gpt4 book ai didi

raku - Sigilless 变量、常量、绑定(bind) : when to choose what

转载 作者:行者123 更新时间:2023-12-04 05:16:01 24 4
gpt4 key购买 nike

因此,从文档中几乎可以清楚标题中的三个实体是什么,但不太清楚它们的目的是什么。

常量在许多语言中都很常见。你不想写3.14遍及你的代码,这就是为什么你定义一个常量 PI就它所代表的事物的性质而言,它是无法改变的,这就是为什么它的值(value)在时间上是恒定的。

使用 := 定义绑定(bind)到另一个实体的变量也几乎清楚但不是真的。如果我将一个变量绑定(bind)到 3.14 , 和定义一个 PI 不一样吗?持续的?是 $a := $b实际定义 $a作为 $b 的别名或者,正如其他一些语言所说的,引用?此外,在某些语言中通常使用引用来明确说明,在对象构造或函数调用中,您不想复制对象,但为什么在相同范围内拥有

$number_of_cakes = 4;
$also_the_number_of_cakes := $number_of_cakes;

?

最后,文档解释了如何定义无符号变量(不能改变,因此实际上是另一种常量),但没有解释为什么要这样做。无符号变量解决了哪些问题?当变量、常量、绑定(bind)变量不能解决无符号变量解决的问题时,实际情况是什么?

最佳答案

Constants are common in many languages. You don't want to write 3.14 all over your code and that's why you define a constant PI that, by the nature of the thing it represents, cannot be changed and that's why its value is constant in time.


为此,您使用 constant .
一个 constant仅在编译期间首次遇到时初始化一次,并且永远不会再次初始化,因此它的值在整个程序运行期间保持不变。编译器可以依赖它。读者也可以——只要他们清楚地理解“值(value)”在这种情况下的含义。1
例如:
BEGIN my $bar = 42;

loop {
constant foo = $bar;
$bar++;
last if $++ > 4;
print foo; # 4242424242
}
请注意,如果您没有 BEGIN然后常量将被初始化并被值 (Any) 卡住。 .
我倾向于不使用印记,以在某种程度上强化它是一个常数的想法,但如果你愿意,你可以使用印记。

Defining a variable bound to another entity with := is also almost clear but not really. If I bind a variable to 3.14, isn't it the same as defining a PI constant? Is $a := $b actually defining $a as an alias to $b or, as some other languages call it, a reference?


绑定(bind)只是绑定(bind)标识符。如果其中任何一个发生变化,它们都会:
my $a = 42;
my $b := $a;
$a++;
$b++;
say $a, $b; # 4444

Finally, the documentation explains how one can define a sigilless variable (that cannot be varied, so, actually, another kind of constant) but not why one would do that.


如果绑定(bind)的事物是变量,则它可以变化。例如:
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
如果标识符绑定(bind)到不可变的基本标量值(例如 42 )或其他完全不可变的值(例如典型的 List ),我个人更喜欢削减符号,否则使用符号。 YMMV。

What problems do sigilless variables solve? What's a practical scenario when a variable, a constant, a binding variable do not solve the problem that a sigilless variable solve?


如果我的答案(或另一个;我看到其他人已发布)中已有的内容给您留下了剩余的问题,请添加评论。
脚注
1 见 my answer to JJ's SO about use of constant with composite containers .

关于raku - Sigilless 变量、常量、绑定(bind) : when to choose what,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55210794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com