如何实现AT-POS
以使其支持多维任何范围,例如[0;*]
和[*; 0]
?
在下面的实现中,我得到了索引超出范围的错误:
class Foo {
has @.grid;
multi method elems { @!grid.elems }
multi method AT-POS($y, $x) is rw { @!grid[ $y ; $x ] }
multi method ASSIGN-POS ($y, $x, $new) { @!grid[ $y; $x ] = $new }
multi method EXISTS-POS($y, $x) { @!grid[ $y; $x ]:exists }
}
my $foo = Foo.new: :grid[ ['a'], ['b', 'c'] ];
say $foo[0;0]; # a
say $foo[0;*].elems; # Expect 1, get 2
say $foo[0;*]; # Expect (a), get "Index out of range"
say $foo[*;0]; # Expect (a b), get "Index out of range"
医生说API是AT-POS($index)。
当我将您的AT-POS替换为:
multi method AT-POS($index) is rw { @!grid[ $index ] }
您的测试用例给出了您期望的结果。
您的ASSIGN-POS
是不必要的,可能会让事情出错。
您可以使用轻松允许下标访问您自己的类: 输出: 但我需要二维下标访问。我已经想出了如何让它在阅读中起作用,但它在写作时就消失了: 输出: 有什么办法可以让这一切顺利吗?
这里是一个MRE(显示了两次尝试,其中保留了debug以提供帮助),用于尝试在具有系列列的数据帧中使用AT-POS进行2d订阅。。。 我已经研究了SO,在这里、这里和这里发现了三个相关的问题......我代码中的尝试#2试图将@lizmats答案应用于第三个。令人鼓舞的是,我的MRE中的两个尝试都有相同的行为。但是我不能锻炼 为什么选项时(尝试#1) 正在做什么-即使我可以看到它在单下标情况下有效
我为一个类定义了方法并导出了运算符。但是,当我在该类的实例上使用时,编译器忽略了我定义的运算符。 这是代码: 那么这段代码有什么问题呢? 更新: 我确实需要将多个索引传递给AT-POS方法,我非常惊讶地发现,在我修复拼写错误时,使用*$索引而不是*@索引可以获得预期的输出。我不知道有这样的用法,比如*$某个参数。它是有效的还是只是编译器的一个bug?
支持多种版本库访问方法 你已经看到了一个版本库可以用多种方式访问,但是可以—或者说安全的—用几种方式同时并行的访问你的版本库吗?回答是可以,倘若你有一些深谋远虑的使用。 在任何给定的时间,这些进程会要求读或者写访问你的版本库: 常规的系统用户使用Subversion客户端(客户端程序本身)通过file://URL直接访问版本库; 常规的系统用户连接使用SSH调用的访问版本库的svnserve进程(
不需要通过配置,以下URL地址是一样的: http://siteurl/index.php?m=User&a=reg 和 http://siteurl/index.php?m=user&a=reg http://siteurl/User/reg 和 http://siteurl/user/reg http://siteurl/Group/Module/action 和 http://siteurl
我在访问二维哈希值时遇到问题。从我在网上可以看出,它应该是这样的: 然而,我得到了一个错误:“类型数组不支持关联索引。” 这是一个最小的可复制示例。 下面是另一个可复制的示例,但时间更长: 在我上面的代码中,访问二维哈希值的问题行将在for循环的第一次迭代中工作一次。然而,它总是在第二次通过时崩溃。我尝试过用静态键值替换大括号中的数组引用,以防这些键值有什么奇怪的地方,但这并不影响结果。我似乎无法