gpt4 book ai didi

ruby - 如何为 Timecop 修补 File 和 CoreExtensions

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

我需要猴子补丁文件。 Timecop 不会影响文件系统报告的时间,这是 File.atime 使用的时间,而这又是 HttpClient 在将文件发布到服务器时使用的时间,这反过来意味着 VCR 不会完全按预期工作。 AFAIK,这意味着我不能使用优化。

我不明白这是怎么回事:

class File
def atime
"this one happens"
end
end

module CoreExtensions
module File
module TimecopCompat
def atime
"this one does not"
end
end
end
end

File.include CoreExtensions::File::TimecopCompat

File.new('somefile').atime # --> "this one happens"

为什么基于模块的猴子修补没有发生?我需要更改什么才能使其正常工作?我应该使用其他类型的猴子补丁吗?

最佳答案

问题与 include 将模块附加到祖先链的方式有关。 “Ruby modules: Include vs Prepend vs Extend ”非常详细地概述了 includeprepend 之间的区别。

看看这两个例子:

class Foo
def hello
"1"
end
end

module Bar
def hello
"2"
end
end

Foo.include Bar

Foo.new.hello
# => "1"
Foo.ancestors
# => [Foo, Bar, Object, Kernel, BasicObject]

对比

class Foo
def hello
"1"
end
end

module Bar
def hello
"2"
end
end

Foo.prepend Bar

Foo.new.hello
# => "2"
Foo.ancestors
# => [Bar, Foo, Object, Kernel, BasicObject]

基本上,您希望在您的案例中使用prepend,因为include 不会覆盖现有方法。

关于ruby - 如何为 Timecop 修补 File 和 CoreExtensions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57225826/

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