gpt4 book ai didi

concatenation - Perl6 字符串连接挂起

转载 作者:行者123 更新时间:2023-12-04 10:33:38 25 4
gpt4 key购买 nike

我试图用 Perl6 连接一个字符串,因此:

my $cmd = "databricks jobs --job-id 37 --notebook-params '\{";
put $cmd;
$cmd ,= "\"directory\": \"$s3-dir\",";
put $cmd;

但是,输出在 ,= 之后挂起运算符(operator)。我假设这与 Perl 的工作方式相同 .=运算符(operator)。

https://docs.perl6.org/language/operators

为什么这个工作挂了?如何正确连接字符串?

最佳答案

没有,=~= Perl6 中的运算符。

这些是 = 的实例元运算符与另一个中缀运算符相结合。

# these are all functionally equivalent:
$a = $a ~ 'a';
$a ~= 'a';
$a [~]= 'a';
$a [&[~]]= 'a';
$a [&infix:<~>]= 'a';

$a = infix:<~> $a, 'a'; # use an operator as a subroutine

有类似 C 语言的历史,具有像 += 这样的运算符。 .
必须为每个中缀运算符定义这样的新运算符会有点累。
在 Perl6 中,您还可以轻松定义新的运算符。
所以它有 =作为将自动与所有中缀运算符一起使用的元运算符。

sub infix:<foo> (\l,\r){…}

$a = $a foo 3;
$a foo= 3;
$a [foo]= 3;

如果你想使用像 += 这样的操作符,只需查找与您想要的匹配的基本运算符并添加 = .

如果要进行字符串连接,基本运算符是中缀 ~运算符(operator)。
(这看起来很像字符串强制前缀运算符 ~ 。)

$a = $a ~ 'a';
$a ~= 'a';

如果要做 Set 差值,基运算符是 (-) .

$a = $a (-) 3;
$a (-)= 3;

您可以添加任意数量的 []围绕一个中缀运算符。
(它前面需要空格,以免与 postcircumfix [] 混淆)

$a     -     3;
$a [-] 3;
$a [[-]] 3;
$a [[[-]]] 3;

这对于确保元运算符也以您想要的方式组合很有用。

$a -=         3;
$a [-]= 3;
3 R-= $a; # $a = $a - 3;
$a [R-]= 3; # $a = 3 - $a;
3 R[-=] $a; # $a = $a - 3;
3 R[[R-]=] $a; # $a = 3 - $a;

这被扩展为 [&…]哪里 &…是作为中缀运算符的函数名称。

sub bar (\l,\r){…}

# these are functionally identical.
$a = bar( $a, 3 );
$a = $a [&bar] 3;
$a [&bar]= 3;

当您使用 ,=您创建了一个自引用数据结构。
(请注意, say 调用 .gist ,我添加了一个额外的 .gist 以明确我没有打印 Str 。)

my $c = 0;
# $c ,= 1;
$c = ($c,1);

say $c.gist;
# (\List_94195670785568 = (List_94195670785568 1))

say $c.WHICH;
# List|94195670785568

当你做一些强制 List 的事情时或 ArrayStr ,它遵循将每个部分变成一个 Str 的结构.

$c = ($c,…);

~$c;
# $c.Str
# | \___________________
# | \
# $c[0].Str ~ ' ' ~ $c[1].Str
# | \ \ \__________
# | | \ \__________________ 1.Str
# | | \
# | V \_____________
# | \
# $c[0].Str ~ ' ' ~ $c[1].Str
# | \ \ \__________
# | | \ \__________________ 1.Str
# | | \
# | V \_____________
# | \
# $c[0].Str ~ ' ' ~ $c[1].Str
# | \ \ \__________
# | | \ \__________________ 1.Str
# | | \
# | V \_____________
# | \
# …

它当然永远不会完成将第一部分变成 Str。
,的组合和 =虽然可以安全地使用哈希。
(这是文档显示的内容。)

my %c = a => 0;
%c ,= b => 1;
# %c = (%c, b => 1)

say %c.gist;
# {a => 0, b => 1}

关于concatenation - Perl6 字符串连接挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54408166/

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