如何在Raku中删除多重方法

Tinmarino

我如何使用在已定义的方法之前会被调用的多方法来扩充一个类?

我试图使负标:@arr[-1]在喜欢这个文章,但不改变源。

因此,我增加了Array

augment class Array { 
    proto method AT-POS(Array:D: Int:D $i where <0 ) {
        say "AT-POS called";
        my $pos = -1;
        my $ix = $pos + self.elems;
        return self.AT-POS($ix);
    }
};

但是正如文档中所述

Please note that adding a multi candidate that differs only
in its named parameters will add that candidate behind the already defined one
and as such it won't be picked by the dispatcher.

所以我的multi从来没有被称为:

say .signature for @arr.^method_table{'AT-POS'}.candidates ;
(Any:U \SELF: int \pos, *%_)
(Any:U \SELF: Int:D \pos, *%_)
(Any:U: Num:D \pos, *%_)
(Any:U: Any:D \pos, *%_)
(Any:D: int \pos, *%_)
(Any:D: Int:D \pos, *%_)
(Any:D: Num:D \pos, *%_)
(Any:D: Any:D \pos, *%_)
($: Any:U \pos, *%_)
(Any:D: \one, \two, *%_)
(Any:D: \one, \two, \three, *%_)
(Any:D: **@indices, *%_)
(List:D: int $pos, *%_)
(List:D: Int:D $pos, *%_)
(Array:D: int $pos, *%_)
(Array:D: Int:D $pos, *%_)  # Their
(Array: $a, *%_)
(Array:D: Int:D $pos, *%_)  # My

我希望在他们之前调用我的方法。如何修改调度程序?

乔纳森·沃辛顿

命名参数无关紧要;这里没有。问题是问题中multi的代码没有添加更具体候选,而是尝试替换proto如果multi是这样,则添加一个候选人:

use MONKEY-TYPING;
augment class Array { 
    multi method AT-POS(Array:D: Int:D $i where $i < 0) {
        nextwith($i + self.elems)
    }
}

然后,由于该where子句的存在,将在AT-POS没有一个子句的通常候选词之前对其进行考虑由于标准候选人也仍然适用,nextwith因此可以顺应。使用上面augment的程序:

my @arr = 1, 2, 3;
my $idx = -1;
say @arr[$idx];

将输出3

有关augment应用的通常警告,并且由于每个数组索引操作都将支付此费用,因此预计会出现明显的下降。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Raku中定义受保护的方法?

来自分类Dev

如何删除列表中的重复项(Raku)

来自分类Dev

您如何在Raku中锁定文件?

来自分类Dev

如何在SQL中查询多重“或”和and?

来自分类Dev

如何在python中执行多重查询?

来自分类Dev

如何在 Access 中运行多重更新?

来自分类Dev

在多重继承的情况下,super方法如何在python中工作?

来自分类Dev

在多重继承的情况下,super方法如何在python中工作?

来自分类Dev

R Reference Class多重继承:如何在特定的父类中调用方法?

来自分类Dev

如何在Owebia运送方法中获得多重选择的属性值

来自分类Dev

如何在Raku-lang中修改矩阵

来自分类Dev

在多重下拉菜单中,如何获取当前删除的值

来自分类Dev

如何从多重启动配置中删除Ubuntu 15.10?

来自分类Dev

如何删除R中的某些数据?(多重回归)

来自分类Dev

如何在多重处理函数中传递参数以及如何使用多重处理列表?

来自分类Dev

如何在Ruby中删除或绕过超类方法?

来自分类Dev

如何在以下类示例中抽象/删除冗余方法

来自分类Dev

如何在删除方法Rails中调用特定路径

来自分类Dev

如何在Xcode Project中删除为Button创建的方法

来自分类Dev

如何在Prolog中处理这个“多重循环”?

来自分类Dev

如何在Advanced Installer中创建多重安装项目

来自分类Dev

如何在CUDA中执行多重矩阵乘法?

来自分类Dev

如何在MondoDB中多重更新嵌套数组?

来自分类Dev

如何在Spring MVC中创建多重布局

来自分类Dev

如何在recyclerview中执行多重选择?

来自分类Dev

如何在R中对微阵列数据执行多重比较

来自分类Dev

如何在Spring MVC中解决多重映射?

来自分类Dev

如何在Spring MVC中创建多重布局

来自分类Dev

如何在MondoDB中多重更新嵌套数组?

Related 相关文章

  1. 1

    如何在Raku中定义受保护的方法?

  2. 2

    如何删除列表中的重复项(Raku)

  3. 3

    您如何在Raku中锁定文件?

  4. 4

    如何在SQL中查询多重“或”和and?

  5. 5

    如何在python中执行多重查询?

  6. 6

    如何在 Access 中运行多重更新?

  7. 7

    在多重继承的情况下,super方法如何在python中工作?

  8. 8

    在多重继承的情况下,super方法如何在python中工作?

  9. 9

    R Reference Class多重继承:如何在特定的父类中调用方法?

  10. 10

    如何在Owebia运送方法中获得多重选择的属性值

  11. 11

    如何在Raku-lang中修改矩阵

  12. 12

    在多重下拉菜单中,如何获取当前删除的值

  13. 13

    如何从多重启动配置中删除Ubuntu 15.10?

  14. 14

    如何删除R中的某些数据?(多重回归)

  15. 15

    如何在多重处理函数中传递参数以及如何使用多重处理列表?

  16. 16

    如何在Ruby中删除或绕过超类方法?

  17. 17

    如何在以下类示例中抽象/删除冗余方法

  18. 18

    如何在删除方法Rails中调用特定路径

  19. 19

    如何在Xcode Project中删除为Button创建的方法

  20. 20

    如何在Prolog中处理这个“多重循环”?

  21. 21

    如何在Advanced Installer中创建多重安装项目

  22. 22

    如何在CUDA中执行多重矩阵乘法?

  23. 23

    如何在MondoDB中多重更新嵌套数组?

  24. 24

    如何在Spring MVC中创建多重布局

  25. 25

    如何在recyclerview中执行多重选择?

  26. 26

    如何在R中对微阵列数据执行多重比较

  27. 27

    如何在Spring MVC中解决多重映射?

  28. 28

    如何在Spring MVC中创建多重布局

  29. 29

    如何在MondoDB中多重更新嵌套数组?

热门标签

归档