小编Jos*_*ner的帖子

Inline:Perl5的列表返回给出项目数,而不是列表

一些简单的Inline :: Perl5代码返回一个列表,但是它似乎返回的是项目数而不是实际的列表。

更改涉及的项目数将更改计数。

use Inline::Perl5;                                             
my $p5 = Inline::Perl5.new;                                    

my $perl5_code = q:to/END/;                                    
   sub p5_data {                                               
      my @monsters = qw( godzilla blob tingler kong dorisday );
      return @monsters;                                        
   }                                                           

   p5_data();                                                  
END                                                            

my @stuff = $p5.run: $perl5_code;                              
say @stuff; # [5]                                              
Run Code Online (Sandbox Code Playgroud)

我以为我会得到存储在数组中的字符串列表,但是相反,它的行为就像是将其切换到标量上下文一样。

更新:

ikeami指出,返回对数组的引用会更好:

return \@monsters;
Run Code Online (Sandbox Code Playgroud)

但是,执行此操作后,您将在@stuff数组的第一个元素中得到一个数组:

my @stuff = $p5.run: $perl5_code;                              
Run Code Online (Sandbox Code Playgroud)

另一种方法(通过阅读Inline :: Perl5文档)是在$p5.run定义a perl5子对象之后,从perl6调用它的:

my @stuff = $p5.call('p5_data');  
Run Code Online (Sandbox Code Playgroud)

然后列表return(return @monsters;)如我所料被加载到数组中:

[godzilla blob tingler kong dorisday]
Run Code Online (Sandbox Code Playgroud)

这是最近安装的Inline :: Perl5版本0.40,位于“基于实现Perl 6.d的MoarVM版本2019.03构建的Rakudo Star版本2019.03.1”上。

Update2:因此,似乎“运行”表示标量上下文,而“调用”表示列表上下文。

use Inline::Perl5;
my …
Run Code Online (Sandbox Code Playgroud)

perl perl6

11
推荐指数
2
解决办法
178
查看次数

perl 5's carp 的 raku 模拟是什么?

默认情况下,Raku 的 "die" 报告 "die" 所在的行号,如果你想要调用上下文的行号,ala "carp" with perl 5 怎么办?

exception carp die raku

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

有没有办法检测某些东西是否不可变?

在 Raku 中,标量可能是不可变的,也可能是实际变量:

 my $a := 6;  # constant
 my $b  = 6;  # variable
Run Code Online (Sandbox Code Playgroud)

是否有一种编程方法来检查标量是否不可变,而无需尝试更改它并查看它是否有效?

raku

10
推荐指数
2
解决办法
149
查看次数

给定两个物体,你能找到最近的共同祖先吗?

给定两个对象,在 Raku 中是否有一种简单的方法可以在它们的继承树中找到最近的共同祖先?

对此已经有一些通用的答案:

如何找到两个对象的最近共同祖先类?

找到给定的两个节点的共同祖先的算法

我想知道 Raku 是否已经内置了惯用的解决方案。

raku

9
推荐指数
1
解决办法
118
查看次数

你如何使用 MagickWand 叠加两个图像?

我只是在看 Raku 的 MagickWand 接口到 imagemagick:

https://modules.raku.org/dist/MagickWand

而且我看不到任何叠加两个图像的方法。在 examples/01-hello.pl6 中演示了一个 MagickWand.append-wands 来平铺图像,我看到代码中有一个 montage 方法(用于创建移动 gifs?),但我没有看到任何类似于我的 Flatten 方法的东西已与 perl 的 Image::Magick 一起使用。

imagemagick raku

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

标签 统计

raku ×4

carp ×1

die ×1

exception ×1

imagemagick ×1

perl ×1

perl6 ×1