gpt4 book ai didi

perl - Perl 中的非本地返回(从调用者返回)

转载 作者:行者123 更新时间:2023-12-05 09:24:36 27 4
gpt4 key购买 nike

有没有办法让我我的来电者而不是我的来电者?例如

sub foo {
bar();
# this never gets executed
}

sub bar {
return_from_caller(5);
}

# This prints 5
print foo();

(基本原理:我正在编写一个函数 memoize_self,它从函数本身内部内存一个函数。我希望它像这样工作:

sub complex_function {
my ($x, $y) = @_;
memoize_self({key => $y, expires_in => '5min'));
# compute $result
return $result;
}

memoize_self 将检查其缓存,如果命中,则 其调用者返回缓存值。否则,它将重新调用该函数(使用动态范围的 var 以避免明显的无限循环),将返回值存储在缓存中并再次返回。

如果不能从调用方返回,我可能会使用 $_ 并这样写:

return $_ if memoize_self({key => $y, expires_in => '5min'));

但这是额外的噪音,也没有考虑上下文。)

编辑:给合理建议的人Memoize - 是的,我应该说,我很了解这个模块。我正在写一个基于 CHI 的更现代和更有特色的 Memoize 版本.

但是关于这个问题,在某些情况下,从函数的内部而不是从函数的外部进行内存是有用的(Memoize 只做后者)。它使自定义缓存键和/或确定是否要为这个特定调用完全内存变得容易。例如

sub complex_function {
my $key = ...; # normalize arguments
if (...) { # is it worth memoizing in this case?
memoize_self({key => $key});
}
}

我也喜欢它包裹在函数中的方式,而不是在外面创建自己的行,ala state variables .

最佳答案

Continuation::Escape做你想要的。 Memoize然而,正如 Nikhil 指出的那样,这才是您真正需要的。

关于perl - Perl 中的非本地返回(从调用者返回),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10372150/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com