当前位置: 首页 > 知识库问答 >
问题:

perl6:传递UInt数组失败,而Int数组成功

束俊英
2023-03-14

如果我执行以下代码

#!/usr/bin/perl6
use v6.c;
use fatal;

sub foo(Int:D @nums) {
    say @nums.join(" ");
}

sub bar(UInt:D @nums) {
    say @nums.join(" ");
}

my UInt:D @nums = (1, 2);
say "foo: ";
foo(@nums);
say "bar: ";
bar(@nums);

我得到以下输出:

foo: 
1 2
bar: 
Constraint type check failed for parameter '@nums'
  in sub bar at ./test.p6 line 9
  in block <unit> at ./test.p6 line 17

但是我不明白,如果我使用UInt-或Int-数组,为什么会有所不同。这可能是一个错误吗?

我正在使用基于MoarVM版本2016.12构建的Rakudo版本2016.12(包含在Debian拉伸中)

共有1个答案

张星洲
2023-03-14

问题似乎出现在错误消息中。如果使用2018.03之类的更新版本,则会显示

Constraint type check failed in binding to parameter '@nums'; expected UInt but got Array[UInt] (Array[UInt].new(1, 2))

也就是说,您可以将代码更改为:

use v6;
use fatal;

sub foo( @nums where { @nums ~~ Array[Int] } ) {
    say @nums.join(" ");
}

sub bar( @nums where { @nums ~~ Array[UInt] } ) {
    say @nums.join(" ");
}

my UInt @nums = (1, 2);
say "foo: ";
foo(@nums);
say "bar: ";
bar(@nums);

我想,这将像预期的那样:

Constraint type check failed in binding to parameter '@nums'; expected anonymous constraint to be met but got Array[UInt] (Array[UInt].new(1, 2))
in sub foo at uint.p6 line 6
in block <unit> at uint.p6 line 16

这似乎是约束位置的唯一实用方法,因为大多数其他方法都会产生错误。

 类似资料:
  • 问题内容: 我似乎记得在PHP中,有一种方法可以将数组作为函数的参数列表传递,以标准方式取消对数组的引用。但是现在我迷失了如何做。我记得通过引用传递的方式,如何“遍历”传入的参数……但没有如何将数组从列表中除名。 它可能和一样简单,但是我敢肯定不是。但是,可悲的是,到目前为止,php.net手册还没有透露任何内容。并不是说我在过去一年左右的时间里不得不使用此特定功能。 问题答案: call_use

  • 问题内容: 对不起这个基本问题。我想将一个切片作为参数传递给。像这样: 结果将是,但这显然不起作用。 (我要格式化的字符串比这要复杂的多,因此,简单的串联是不会做到的:) 所以问题是:如果我有数组,如何将其作为单独的参数传递给?或者:我可以调用在Go中传递参数列表的函数吗? 问题答案: 正如您在IRC上发现的那样,它将起作用: 您的原始代码无法正常工作,因为接受a 并且无法将其隐式或显式转换为该类

  • 问题内容: 假设我有一个包含大量元素的javascript数组(50-200之间的任何位置)。 我想使用ajax将其发送到PHP(预备语句)。目前,我在循环中多次创建一个php文件,但我想将其转换为数组并发送一次数组,然后将PHP文件加载一次,而不是50-200次。 问题答案: 您可以使用JavaScript对数组进行编码,然后在PHP脚本中使用以对其进行检索。

  • 我正在尝试用java swing制作一个Tic-Tac-Toe程序,我已经制作了框架。如何让JButton数组中的按钮激活int数组?我希望int数组保存Tic-Tac-Toe网格中点的值,因此当按下按钮时,int数组中的对应点将是0或1,按钮的文本将更改为X或O。

  • 问题内容: 有谁知道如何将C#ASP.NET数组传递给JavaScript数组?示例代码也将很好。 对不起,如果我以前的人含糊不清。这个问题实际上很简单。为了简单起见,我在文件中声明: 现在,我想传递给客户端,并在JavaScript中使用数组中的数据。我该怎么做? 问题答案: 您可以使用ClientScript.RegisterStartUpScript将javascript注入Page_Loa

  • C++ 数组 C++ 中您可以通过指定不带索引的数组名来传递一个指向数组的指针。 C++ 传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址。 如果您想要在函数中传递一个一维数组作为参数,您必须以下面三种方式来声明函数形式参数,这三种声明方式的结果是一样的,因为每种方式都会告诉编译器将要接收一个整型指针。同样地,您也可以传递一个多维数组作为形式参数。 方式 1 形式参数是一个指针: