我建议的解决方案是删除括号:
say "A";
my $string1 = "00aabb";
my $string2 = "02babe";
say join "A", $string1, $string2; # Pass THREE arguments to `join`, not ONE
print "\n";
my @strings = $string1, $string2;
say join "A", @strings;
print "\n";
(@strings
第二次调用中的元素join
被展平,因此与第一次调用相同join
。)
上面的代码显示:
A
00aabbA02babe
00aabbA02babe
当我在其中运行此脚本时,Raku
我收到A
带有几个换行符的字母。
您的代码join
使用 ONE 参数(即连接符)和要连接的零字符串调用。所以join
调用会生成空字符串。因此你得到空行。
为什么我没有得到连接的字符串
代码中的两个say join...
语句只打印一个换行符,因为它们就像say
下面的第三和第四行:
say join( " \o/ ", "one?", "two?" ); # one? \o/ two?
say join " \o/ ", "one?", "two?" ; # one? \o/ two?
say join ( " \o/ ", "one?", "two?" ); # 
say join( " \o/ one? two?" ); # 
上面的第一行和第二行将三个字符串传递给join
. 第三行传递一个单一 List
的,然后被强制成为一个单一的字符串(List
使用单个空格字符连接的元素的串联),即与第四行相同的结果。
咒语恰好按您的my @strings = ($string1, $string2);
预期工作,因为对左侧的“复数”变量的赋值将在右侧=
迭代值或值列表。
但是在 Raku 中,避免冗余代码是一个好习惯,在这种情况下,只有在你真的必须使用它们来表达与没有它们的代码不同的东西时才使用括号。这是 Raku 中使代码高信号、低噪声的一般原则。对于您的代码,所有括号都是多余的。