gpt4 book ai didi

ruby - 混合模块中的 self.class.name

转载 作者:数据小太阳 更新时间:2023-10-29 07:14:29 24 4
gpt4 key购买 nike

我有一个模块,其中包含写入日志的方法。在每条消息中,我想放入记录这条消息的类的名称。

模块可以混合使用includeextend。我需要我的日志在每种情况下都有正确的类名。

精炼代码:

module M
def f
self.class.name
end
end

class C
extend M
include M
end

p C.f # => "Class"
p C.new.f # => "C"

如您所见,第一个调用错误地打印了 "Class"。我也希望它是 "C"

如何实现?

最佳答案

无需求助于钩子(Hook),当 selfClass/Module 时,只需更改您的行为:

module M
def f
self.is_a?(Module) ? name : self.class.name
end
end

class C
extend M
include M
end

C.f #=> "C"
C.new.f #=> "C"

关于ruby - 混合模块中的 self.class.name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14782155/

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