标签: variable-binding

真的将参数绑定到参数吗?(Perl6)

Perl6文档状态“默认情况下,参数绑定到他们的说法,并标记为只读。” 但是运行以下代码:

# Example 1
sub f1 ( $x ) { say $x.VAR.WHAT; say $x.WHAT; say $x }
f1(1);
Run Code Online (Sandbox Code Playgroud)

产量:

(Scalar)
(Int)
1
Run Code Online (Sandbox Code Playgroud)

而这段代码:

# Example 2
my $y := 1;
say $y.VAR.WHAT; say $y.WHAT; say $y;
Run Code Online (Sandbox Code Playgroud)

产量:

(Int)
(Int)
1
Run Code Online (Sandbox Code Playgroud)

(Scalar)是我不理解的Example1的输出:我应该将Int 1参数绑定到标识符时,为什么会有标量$x?似乎该值已1“分配”给$x,而不是“绑定”了。

variable-assignment perl6 variable-binding

10
推荐指数
1
解决办法
63
查看次数

我可以一次绑定多个变量吗?

下面这行声明了一个变量并将其绑定到右侧的数字。

my $a := 42;
Run Code Online (Sandbox Code Playgroud)

效果是这$a不是 a Scalar,而是 an Int,正如可以看到的

say $a.VAR.^name;
Run Code Online (Sandbox Code Playgroud)

我的问题是,我可以在一个声明中绑定多个变量吗?这不起作用:

my ($a, $b) := 17, 42;
Run Code Online (Sandbox Code Playgroud)

因为,正如使用 所见say $a.VAR.^name,现在$a$b都是Scalars。(我想我明白为什么会发生这种情况,问题是是否有一种不同的方法可以在不创建s的情况下将$a和绑定$b到给定IntScalars。)

此外,在这种情况下使用:=和之间有什么区别=吗?

variable-binding raku

10
推荐指数
1
解决办法
190
查看次数

重新绑定的规则是什么?

[注意:我根据旧版本的 Rakudo 问这个问题。正如已接受的答案中所解释的,令人困惑的输出是 Rakudo bug 的结果,现已解决。我留下了下面 Q 的原始版本以供历史参考。]

\n

Raku 有时会禁止重新绑定;以下两行

\n
sub f($a) { $a := 42 }\nmy \\var = \'foo\'; var := \'not-foo\';\n
Run Code Online (Sandbox Code Playgroud)\n

产生编译时错误:

\n
===SORRY!=== Error while compiling \nCannot use bind operator with this left-hand side\n
Run Code Online (Sandbox Code Playgroud)\n

然而,Raku 允许在很多很多情况下重新绑定 \xe2\x80\x93 ,包括许多让我大吃一惊的情况。以下所有内容都成功重新绑定;每个say输出not-foo

\n
sub f($a) { $a := 42 }\nmy \\var = \'foo\'; var := \'not-foo\';\n
Run Code Online (Sandbox Code Playgroud)\n

因此,目前看来,只要满足以下任一条件,任何名称都可以重新绑定,无论是否有印记:

\n
    \n
  1. 该名称具有任何显式类型约束(包括或符号Any施加的类型约束),或者@%
  2. \n
  3. 重新绑定使用限定名称。 …

immutability rakudo lexical-scope variable-binding raku

7
推荐指数
1
解决办法
312
查看次数

将标量绑定到无字符变量(Perl 6)

让我说,我明白,我要问关于标题是可疑的做法(如解释开始在这里),但我缺乏了解涉及所涉及的语法.

当我第一次尝试将标量绑定到无标记符号时,我这样做了:

my \a = $(3);
Run Code Online (Sandbox Code Playgroud)

认为$(...)将Int 3打包在标量中(如文档中似乎所建议的那样),然后将其绑定到符号a.这似乎不起作用:Scalar无处可寻(a.VAR.WHATreturn(Int),而不是(Scalar)).

在上面提到的帖子中,raiph提到可以使用不同的语法执行所需的绑定:

my \a = $ = 3;
Run Code Online (Sandbox Code Playgroud)

哪个有效.鉴于结果,我怀疑该陈述可以等同地表达,虽然不那么简洁,因为:my \a = (my $ = 3)我可以理解.

这留下了一个问题:为什么尝试$(...)不起作用,它又做了什么?

perl6 variable-binding

6
推荐指数
1
解决办法
127
查看次数

具有类型约束的无符号“变量”是否可以重新绑定?

[编辑:关闭支持/sf/ask/4846205451/,这是我在更清楚地理解我在这个问题中想问的内容后制定的。 ]

\n

我的理解是禁止无符号变量重新绑定有目的或好处吗?是一个没有印记的符号永远不可能无法反弹。引用那个答案:

\n
\n

是的,[当前的行为]肯定是设计使然,而且 - 就像 [Raku] 设计中的大多数东西一样 - 这样做的原因不止一个。\xe2\x80\xa6 决定采用无符号符号形式“静态单一赋值”语法\xe2\x80\xa6。造成这种情况的原因有多种,包括\xe2\x80\xa6 通过让读者知道符号永远不会反弹到新值的形式来增强程序可读性

\n
\n

(强调已添加。)

\n

鉴于此,我非常惊讶地看到下面的代码:

\n
my Int \\b = 8;\nsay "{b*b}"; # OUTPUT: \xc2\xab64\xc2\xbb\n\nb := 4;\nsay "{b*b}"; # OUTPUT: \xc2\xab16\xc2\xbb\n
Run Code Online (Sandbox Code Playgroud)\n

也就是说,当b声明时没有印记但具有类型Int约束时,它可以反弹 \xe2\x80\x93 ,这与缺乏该类型约束时不同。这种行为是错误还是正确的?

\n

如果是,它如何符合上面链接的答案中提到的设计考虑因素?

\n

(另请参阅GitHub 上的Raku/doc 问题线程,了解此行为及其是否是有意为之的讨论。)

\n

immutability rakudo variable-binding raku

5
推荐指数
1
解决办法
110
查看次数

*ngIf中的角度6变量或方法绑定

绑定变量和绑定模板*ngIf中的方法之间是否有任何区别.

例如:

情况1:

<div *ngIf="myVar">ABC</div>
Run Code Online (Sandbox Code Playgroud)

案例2:

<div *ngIf="myFunction()">ABC</div>

myFunction() : boolean {
   if (cond1 && cond2 && cond3) {
       return true;
   } else { 
       return false;
   }
}
Run Code Online (Sandbox Code Playgroud)

对性能有影响吗?

我正在尝试使用2种情况,获取范围错误:最大调用堆栈超出.

帮我这个?谢谢

angular variable-binding

2
推荐指数
1
解决办法
2592
查看次数