【发布时间】:2020-04-27 16:05:39
【问题描述】:
我已经有 20 年没有使用 Perl 了,这让我很困惑。我已经 g******d 了,但我显然没有使用合适的搜索字符串,因为我没有找到任何与此相关的内容......
我为什么要执行以下操作?我明白它在做什么,但“为什么”让我无法理解。为什么不直接返回 0 或 1 开始呢?
我正在编写一些代码,其中 sub 使用“return sub”;这是一个非常截断的例子,例如
sub test1 {
$a = shift @_;
if ($a eq "cat") {
return sub {
print("cat test OK\n");
return 0;
}
}
# default if "cat" wasn't the argument
return sub {
print("test for cat did not work\n");
return 1;
}
}
$c = test1("cat");
print ("received: $c\n");
print ("value is: ",&$c,"\n");
$c = test1("bat");
print ("received: $c\n");
print ("value is: ",&$c,"\n");
【问题讨论】:
-
你问我们为什么我们一无所知的代码是这样写的。我们怎么可能回答这个问题?
-
如果您来自 OO 背景,那么将匿名 sub 视为一种小型单对象方法可能是一种有用的心理练习。通过闭包绑定一些值很像用私有数据实例化一个对象。
-
Ikegami - 我不知道为什么会这样写 - 这就是我问这个问题的原因(我什至不知道原作者是否还在我们身边,所以我不能问他们。 ..).
-
问题不是你问的;问题是您没有提供有关您要询问的代码的任何信息。您提供了与您的问题完全无关的代码。
-
对不起,如果您认为这无关紧要 - 也许我问的问题很糟糕。原始代码有一堆 if else's,每个返回一个 sub(每个返回 0 或 1,当被调用时)。我将它编辑为只有一个测试,它返回一个子,默认值,它返回一个子。这怎么不相关?我不想争论,我只是想知道为什么我想这样做而不是从每个测试中返回一个标量。
标签: perl return subroutine