gpt4 book ai didi

ruby 1.8.6 : How to alias a constant in one class to a class method in another?

转载 作者:太空宇宙 更新时间:2023-11-03 16:10:28 26 4
gpt4 key购买 nike

有什么方法可以跨类创建别名吗?具体来说,从一个类中的常量到另一个类中的类方法?

有点像

Object.const_set('Foo', proc { Bar.meth })

除非在引用时自动评估 proc。 (上面的 puts Foo 显示了 proc #inspect 值;我需要执行 Foo.call 来实际调用 bar.meth -- 这是我试图巧妙解决的额外步骤。)

换句话说,我想给常量起别名,这样当我说 puts Foo 时,它就完全等同于 puts Bar.meth。如果 Bar.meth 在不同的时间返回不同的值,那么 Foo 也会相应地计算出不同的值——因为它们是相同的。

这可以做到吗?

谢谢!

最佳答案

这就是你想要的?

class A
def self.bar
"Test"
end
end
class B
def self.Foo
A.bar
end
def self.const_missing(name)
methods.include?(name.to_s) ? __send__(name) : super
end
end

A.bar
B.Foo
B::Foo
# all returns "Test"

关于 ruby 1.8.6 : How to alias a constant in one class to a class method in another?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5084029/

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