【发布时间】:2023-03-03 19:14:02
【问题描述】:
我想为一个类对象定义一个单例方法,它的工作原理与def 类似,但也可以做一些其他的事情。继承类可以像 def 一样使用该方法,除了使用方法名称而不是 def 之外,不需要任何其他特殊语法。
一个具体的例子会有所帮助。在我正在开发的代码中,我想将某些方法标记为“alpha”或“beta”。这样,您可以查询类对象的哪些方法是正常的、哪些 alpha 和哪些 beta。这是我目前的做法:
# Person
class Person
def self.states
if not instance_variable_defined?(:@states)
@states = {}
end
return @states
end
def self.set_state(method_name, state)
states[method_name] = state
end
end
# Guest
class Guest < Person
set_state 'sender', 'alpha'
def sender(param1, param2)
# do stuff
end
end
puts Guest.states
最后一行输出
{:sender=>"alpha"}
好的,这行得通。但我真正想要的是能够调用一个像def 一样工作的方法,但它可以将一个方法标记为 alpha 或 beta。所以 Guest 类可能看起来像这样:
class Guest < Person
alpha sender(param1, param2)
# do stuff
end
end
我宁愿不使用块,如下所示。撇开范围和其他问题不谈,它只是感觉不像是在定义一种方法。
alpha('sender') do |param1, param2|
# do stuff
end
有没有办法对这样的事情进行元编程?
【问题讨论】:
-
我几乎可以肯定,没有块 / proc 就没有办法做到这一点
标签: ruby