小编Rya*_*son的帖子

在Perl中,如何在字符串中调用名称为的方法?

我正在尝试编写一些抽象代码,用于搜索属性与特定值匹配的第一个类似对象的列表.为了做到这一点,我需要调用一堆访问器方法并逐个检查它们的所有值.我想使用这样的抽象:

sub verify_attribute {
    my ($object, $attribute_method, $wanted_value) = @_;
    if ( call_method($object, $attribute_method) ~~ $wanted_value ) {
        return 1;
    }
    else {
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我可以遍历一个哈希,哈希的密钥是访问者方法名称,其值是我正在为这些属性寻找的值.例如,如果调用该哈希%wanted,我可能会使用这样的代码来查找我想要的对象:

my $found_object;
FINDOBJ: foreach my $obj (@list_of_objects) {
    foreach my $accessor (keys %wanted) {
        next FINDOBJ unless verify_attribute($obj, $accessor, $wanted{$accessor});
    }
    # All attrs verified
    $found_object = $obj;
    last FINDOBJ;
}
Run Code Online (Sandbox Code Playgroud)

当然,唯一的问题是call_method不存在.或者是吗?如果我有一个包含其名称的字符串,我该如何调用方法?或者对整个问题有更好的解决方案吗?

oop string methods perl symbols

6
推荐指数
1
解决办法
363
查看次数

如何在没有它们跳过彼此的XS模块的情况下安装多个Perl版本?

我想在我的主目录中安装几个不同版本的perl.我试过使用App::perlbrew,但是一个版本的XS模块导致了另一个版本的段错误.有没有办法安装多个版本的perl并让它们自动保持其XS模块分开?

perl compatibility multiple-versions perlbrew

6
推荐指数
1
解决办法
2476
查看次数

在perl中使用错误但没有堆栈跟踪的正确方法是什么?

我正在编写一个perl脚本,在我正在检查用户在命令行上提供的选项的部分中,我想退出时出现错误,解释选项有什么问题.在这种情况下,不需要堆栈跟踪与此错误消息一起使用.那么,使用错误消息但没有堆栈跟踪或调试信息的最佳方法是什么?

我尝试过以下方法:

die "Invalid options";
Run Code Online (Sandbox Code Playgroud)

哪个产生

Invalid options at myscript.pl line 49.
Run Code Online (Sandbox Code Playgroud)

然后,我试过了

use Carp;
...
croak "Invalid options";
Run Code Online (Sandbox Code Playgroud)

哪个产生

Invalid options at myscript.pl line 47
    main::prepare_output_directory() called at myscript.pl line 546
Run Code Online (Sandbox Code Playgroud)

那我怎么能Invalid options和别人一起死?

奖金问题:为什么croak告诉我错误是在第47行,当实际呼叫croak是在第49行?

error-handling perl die

6
推荐指数
1
解决办法
1370
查看次数

R中scan()的反转是什么?

我想简单地将一个以空格分隔的整数列表写入R中的文件.我可以使用文件文件中读取空格分隔的列表,但是有没有执行相反的功能?换句话说,如何以这样的方式将整数向量写入文件,以便稍后我可以将文件读回相同的向量?scanscan

我不希望任何幻想像savewrite.table.

file-io r

6
推荐指数
2
解决办法
377
查看次数

如果第一行和最后一行不够长,如何在Emacs中删除一个矩形文本?

在Emacs中,我有时想要删除或复制一个矩形文本,例如:

XX first line
XX second line is longer
XX 3rd line short
Run Code Online (Sandbox Code Playgroud)

我想复制三行,每行不带前导"XX".但是,不可能标记所需矩形的两个角,因为第一行和第三行没有到达我所追求的矩形的右边缘.那么如何在emacs中没有前导"XX"的情况下复制上面的三行?

emacs

6
推荐指数
1
解决办法
665
查看次数

在Python中,我可以阻止函数捕获KeyboardInterrupt和SystemExit吗?

我正在用Python编写一些代码:

import sys
try:
    for x in large_list:
        function_that_catches_KeyboardInterrupt(x)
except KeyboardInterrupt:
    print "Canceled!"
    sys.exit(1)
Run Code Online (Sandbox Code Playgroud)

当我尝试中断循环时,我基本上需要按住Control+ C 足够长的时间来取消函数的所有调用,large-list然后才能退出.

有什么方法可以阻止该函数捕获KeyboardInterrupt,以便我自己能够捕获它吗?我能想到的唯一方法是通过创建一个单独的线程来滥用线程,只是为了调用函数,但这似乎是过分的.

编辑:我检查了有问题的代码(我不能轻易改变),它实际上使用裸except:,所以甚至sys.exit(1)被捕获为SystemExit异常.我如何逃离裸露的except:街区并退出我的计划?

python exception-handling

6
推荐指数
1
解决办法
581
查看次数

是否有可能检测到http git遥控器是聪明还是愚蠢?

我正在我的应用程序中实现一个选项,--depth 1用于制作git repo的最小功能克隆,我刚刚意识到哑传输不支持--depth.我想自动检测http遥控器是哑还是智能,所以我可以--depth在与dumb http repos交谈时省略该选项.这可能吗?

或者,有没有直接的方法来检查git遥控器是否支持--depth

git http

6
推荐指数
2
解决办法
1988
查看次数

我可以告诉R plyr包默认并行工作吗?

我正在做一些像这样的分析:

library(plyr)
input.files <- c("file1.txt", "file2.txt", "file3.txt")
input.data <- llply(input.files, load.file, .parallel=TRUE)
step.one.results <- llply(input.data, step.one, .parallel=TRUE)
step.two.results <- llply(step.one.results, step.two, .parallel=TRUE)
...
step.N.results <- llply(`step.N-1.results`, step.N, .parallel=TRUE)
...
Run Code Online (Sandbox Code Playgroud)

是否有任何方法可以使所有plyr函数默认并行,所以我不必总是.parallel=TRUE为每一步指定?

parallel-processing default r plyr

6
推荐指数
1
解决办法
532
查看次数

如何获得R中S4类上定义的所有方法的列表?

在R中是否有一种方法可以获得在S4类上定义的所有方法的列表,给定该类的名称?

编辑:我知道showMethods可以向我展示所有方法,但我想以编程方式操作列表,所以这没有用.

methods r introspection s4

6
推荐指数
1
解决办法
1885
查看次数

给出/何时给出Perl弃用的推荐替代品是什么?

既然Perl开发人员决定对给定/何时语句进行排序,是否有推荐的替代品,除了回到if/elsif/else之外?

perl switch-statement

6
推荐指数
1
解决办法
1198
查看次数