gpt4 book ai didi

binding - 是否有一些模型可用于理解 Raku 中的容器、引用、原始、rw、\?

转载 作者:行者123 更新时间:2023-12-03 15:30:30 24 4
gpt4 key购买 nike

在 perl5 中你可以想到 \作为指针并通过以特定符号或 -> 为前缀取消引用该指针.您还有使符号显式的类型团。在 perl5 中,底层 C 代码结构将提供一个与语言语法相关的良好模型。
在 Raku 中,您有一组概念,例如:容器(和非容器?)、绑定(bind)、分配 =:= , 参数中的不同特征,如 rawrw\ (这似乎与 perl5 的 \ 无关?)。
是否有一些基础模型可用于确定我在代码中的某个点实际使用的内容以及我有哪些选项?

最佳答案

当你写这个:

my $a = 'b';

$a = 'c';

say $a;
发生的事情有点像这样:
my $a := Scalar.new( value => 'b' );

$a.set-value('c');

say $a.get-value();
基本上创建了一个新的标量对象并 $a是指向它的指针。

当然没那么简单,你甚至不能调用 .new在标量上并让它做任何事情。
Scalar 对象内部还存储了更多信息。
例如类型信息和任何默认值。
真的如你所想 $变量都包含在 Scalar 对象中。
通常,此容器会尝试完全透明。
但是,您可以使用 .VAR 获取标量对象。方法/宏。
my Int $a is default(42) = 3;

my $var = $a.VAR;

say $var.name; # $a
say $var.of; # (Int)
say $var.default; # 42
say $var.self; # 3
还有其他方法可以使这种透明度变得比透明更半透明。
sub foo ( \v ){ # the \ is so it isn't seen as a Type name
say v.VAR.name
v = 22;
}
foo $a; # $a
say $a; # 22
那是因为标量被传递给子例程,而不是标量内部的值。
标量总是传递给函数调用,只是函数经常决定做一些事情,而不是允许您原始访问原始标量。
在下文中,传递的 Scalar 内部的值被复制到一个不允许修改的新 Scalar。
sub bar ( $v ){
# $v = 3; # ERROR
}
bar $a
如果您已声明 $vis rwis raw , $v实际上是指向您传入的标量容器的指针,就像 \v多于。 ( \vis raw 非常相似。)

关于binding - 是否有一些模型可用于理解 Raku 中的容器、引用、原始、rw、\?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63070495/

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