gpt4 book ai didi

Ruby `ensure` 未运行

转载 作者:太空宇宙 更新时间:2023-11-03 17:08:14 25 4
gpt4 key购买 nike

我的模型中有一个在私有(private)方法中运行的简单方法:

def with_time_zone(zone)
@old_time_zone = Time.zone
Time.zone = self.account.timezone
Chronic.time_class = Time.zone
yield
ensure
Time.zone = @old_time_zone
Chronic.time_class = @old_time_zone
end

我是这样使用的:

with_time_zone(account.timezone) do
Time.parse(@time)
end

但是,当我运行我的测试时,开始时时区设置为 EST,但是当需要比较时间时,Time.zone 将设置为最后一个时区在那个 block 中使用。因此告诉我 ensure 方法没有被调用,Time.zone 没有被重置。

有人知道为什么会发生这种情况吗?

最佳答案

也许,您正在对方法进行嵌套调用?由于您不维护堆栈,因此第一个嵌套调用将导致 @old_time_zone 的早期值丢失。

如果是这样,就停止使用实例变量,改用局部变量(没有 @ 符号)。该方法的每个嵌套调用都有自己的局部变量,并且它们仍在 ensure block 的范围内。

关于Ruby `ensure` 未运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10517489/

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