在例程中§
有关trait is cached,请参阅主要文档 上下文
multi trait_mod:<is>(Routine , :!)
导致例程的返回值被存储,以便在使用相同参数列表进行后续调用时,可以立即返回存储的值,而不是重新运行例程。[1]
当存储和返回计算值比每次重新计算它快得多,并且节省的时间胜过使用更多内存的成本时,这很有用。
即使传递给例程的参数是“引用类型”(例如对象或数组),那么为了缓存的目的,它们将仅根据其内容进行比较。因此,在这种情况下,第二次调用将命中缓存
say foo( [1, 2, 3] ); # runs foosay foo( [1, 2, 3] ); # doesn't run foo, uses cached value
由于它仍处于实验阶段,因此您必须在使用它的任何模块或脚本中插入 use experimental :cached;
语句。
use experimental :cached;sub nth-prime(Int where * > 0) is cachedsay nth-prime(43);say nth-prime(43);say nth-prime(43);
产生此输出
Calculating 43th prime 191 191 191
注意:此功能不是线程安全的。