gpt4 book ai didi

ruby - 完善gem的类方法

转载 作者:数据小太阳 更新时间:2023-10-29 08:02:33 25 4
gpt4 key购买 nike

我必须以优雅且独立的方式围绕外部 gem 包装一些行为。鉴于下面的抽象,一切运行顺利,但从未打印过“bar”。谁能告诉我为什么?

我的代码:

module RefineGem
refine GemMainModule::GemClass do
def self.foo
p 'bar'
super
end
end
end

module Test
using RefineGem

def test
GemMainModule::GemClass.foo
end
end

class Testing
include Test
end

Testing.new.test

gem 代码:

module GemMainModule
class Base
include GemMainModule::Fooable
end

class GemClass < Base
end
end

module GemMainModule
module Fooable
extend ActiveSupport::Concern

class_methods do
def foo
p 'zoo'
end
end
end
end

最佳答案

我怀疑类方法的改进是否有效。不过,您可以优化 singleton_class:

module RefineGem
refine GemMainModule::GemClass.singleton_class do
def foo
p 'bar'
super
end
end
end

我个人更喜欢使用 Module#prepend实现相同的功能:

GemMainModule::GemClass.singleton_class.prepend(Module.new do
def foo
p 'bar'
super
end
end)

关于ruby - 完善gem的类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47223078/

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