我为一个类定义了AT-POS
方法并导出了[]
运算符。但是,当我在该类的实例上使用[]
时,编译器忽略了我定义的运算符。
这是代码:
unit module somelib;
class SomeClass is export {
method AT-POS(@indices) {
say "indices are {@indices.perl}"
}
}
multi postcircumfix:<[ ]> (SomeClass:D $inst, *@indices) is export {
$inst.AT-POS(@indices)
}
#! /usr/bin/env perl6
use v6.c
use lib ".";
use somelib;
my $inst = SomeClass.new;
$inst[3, 'hi'];
# expected output:
# indices are 3, 'hi'
# actual output:
# Type check failed in binding to parameter '@indices';
# expected Positional but got Int (3)
# in method AT-POS at xxx/somelib.pm6 (somelib) line 4
# in block <unit> at ./client.pl6 line 8
那么这段代码有什么问题呢?
更新:
我确实需要将多个索引传递给AT-POS方法,我非常惊讶地发现,在我修复拼写错误时,使用*$索引而不是*@索引可以获得预期的输出。我不知道有这样的用法,比如*$某个参数。它是有效的还是只是编译器的一个bug?
unit module somelib;
class SomeClass is export {
method AT-POS($indices) {
say "indices are {$indices.perl}"
}
}
multi postcircumfix:<[ ]> (SomeClass:D $inst, *$indices) is export {
$inst.AT-POS($indices)
}
#! /usr/bin/env perl6
use v6.c;
use lib ".";
use somelib;
my $inst = SomeClass.new;
$inst[3, 'hi'];
# expected output:
# indices are 3, 'hi' # or something like it
# actual output:
# indices are $(3, "hi") # It's ok for me.
问题是,AT-POS只能接收一维位置的单个参数。如果指定一个切片,则该设置将负责多次调用AT-POS,并将结果收集到列表中:
class A {
method AT-POS($a) { 2 * $a }
}
dd A.new[1,2,3,4]; # (2,4,6,8)
此外,您不需要提供后循环修复:
这里是一个MRE(显示了两次尝试,其中保留了debug以提供帮助),用于尝试在具有系列列的数据帧中使用AT-POS进行2d订阅。。。 我已经研究了SO,在这里、这里和这里发现了三个相关的问题......我代码中的尝试#2试图将@lizmats答案应用于第三个。令人鼓舞的是,我的MRE中的两个尝试都有相同的行为。但是我不能锻炼 为什么选项时(尝试#1) 正在做什么-即使我可以看到它在单下标情况下有效
如何实现以使其支持多维任何范围,例如和? 在下面的实现中,我得到了索引超出范围的错误:
本文向大家介绍Linux用户自定义at、cron计划任务执行的方法,包括了Linux用户自定义at、cron计划任务执行的方法的使用技巧和注意事项,需要的朋友参考一下 Linux系统中有两种计划任务,一种是只会执行一次 at 计划任务,一种是可以周期性地执行的 cron 计划任务 at 一次性计划任务 描述 在指定的时间执行特定命令(单次),也称为延时动作任务。 用法 参数 实例 首先查看系统时间
我在运行项目时遇到错误: 环境: 请求方法:发布请求URL:http://127.0.0.1:8000/ Django版本:1.8。4 Python版本:2.7。6个已安装的应用程序:('django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','djang
问题内容: 我的问题与此相似。它涉及对象方法而不是模块内容。我想知道是否可以使用inspect模块来获取仅在我要询问的类中定义的方法,而不是其父类中定义的方法。 我之所以需要这样做,是因为我的子类定义了“宏”方法,该方法在更高的抽象级别访问父方法,并且我不希望用户担心在继承过程中一直定义的较低级别的方法。树。 这是一个简化的示例: 输出: 用户不必知道或关心fs的存在,因为她只会对gs感兴趣。(当
问题内容: 在Python中,该类充当所有(新样式)类的根超类。至少默认情况下,将和应用于的任何子类的“类实例”会产生相同的结果: 我想定义一个的子类,例如,它在每种方式上都是相同的,除了对自身和产生不同的输出: 有没有办法在Python中做到这一点? PS:我知道特殊的方法,但是据我了解,如果类重写,则仅当在的实例上调用时才调用覆盖方法,而不是在自身上调用时。即: 问题答案: 实际上,与对象实例