gpt4 book ai didi

raku - 更新 CompUnit::PrecompilationStore 中的程序?

转载 作者:行者123 更新时间:2023-12-04 14:53:57 27 4
gpt4 key购买 nike

我正在处理由 Rakudo Perl 编译的文档,并且这些文档可以得到更新。
我将文档存储在 CompUnit::PrecompilationStore::File 中

如何将旧版本更改为新版本?

下面的程序产生相同的输出,就好像较新的版本没有存储在 CompUnit 中一样。我究竟做错了什么?

use v6.c;
use nqp;
'cache'.IO.unlink if 'cache'.IO ~~ e;
my $precomp-store = CompUnit::PrecompilationStore::File.new(prefix=>'cache'.IO);
my $precomp = CompUnit::PrecompilationRepository::Default.new(store=> $precomp-store );
my $key = nqp::sha1('test.pod6');

'test.pod6'.IO.spurt(q:to/--END--/);
=begin pod
=TITLE More and more

Some text

=end pod
--END--
$precomp.precompile('test.pod6'.IO, $key, :force);
my $handle = $precomp.load( $key )[0];
my $resurrected = nqp::atkey($handle.unit,'$=pod')[0];
say $resurrected.contents[1].contents[0];


'test.pod6'.IO.spurt(q:to/--END--/);
=begin pod
=TITLE More and more

Some more text added

=end pod
--END--
# $precomp-store.unlock;
# fails with:
# Attempt to unlock mutex by thread not holding it
# in block <unit> at comp-test.p6 line 30

$precomp.precompile('test.pod6'.IO, $key, :force);
my $new-handle = $precomp.load($key)[0];
my $new-resurrected = nqp::atkey($new-handle.unit,'$=pod')[0];
say $new-resurrected.contents[1].contents[0];

输出总是:
Some text
Some text

更新:我原来的问题有 '$handle' 而不是 '$new-handle',其中定义了 '$new-resurrected'。输出没有变化。

最佳答案

我想答案可能是 in the answer to other, similar question of yours here通常,CompUnits 旨在是不可变的。如果对象改变,目标也需要改变。正如@ugexe 在那里所说,

$key is intended to represent an immutable name, such that it will always point at the same content.



因此,您实际上可能正在寻找类似 precomp 的行为,但您可能不想使用实际的 CompUnit 来做到这一点。

关于raku - 更新 CompUnit::PrecompilationStore 中的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53736139/

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