如何解决如何将变量拉入单例类的作用域?
|module EventSubscriber
def method_missing(method_name,*args)
if method_name[/^subscribe_to_(.*)/]
class << self
define_method(method_name) do |*arguments|
# ....
end
end
send(method_name,*args)
else
super
end
end
end
EventSubscriber
是一个模块,可以混入类中以订阅事件。如果调用了称为“ѭ2”的方法,则会对其进行定义(以避免再次产生“ѭ3”的开销),然后再调用该方法。如何将该变量纳入范围?
问题出在单例类内部,method_name
似乎不可访问。 Ruby抱怨一个“未定义的局部变量或方法”。
我知道我可以用self.class.send(:define_method ..)
来做到这一点,但我宁愿不这样做,除非必须这样做。我更喜欢这种格式。
解决方法
如何使用:
module EventSubscriber
extend self
def method_missing(method_name,*args)
if method_name[/^subscribe_to_(.*)/]
class << self
define_method(method_name) do |*arguments|
# ....
end
end
send(method_name,*args)
else
super
end
end
def singleton(obj)
class << obj; self; end
end
end
, 当前的问题是您正在使用class << object
语法来访问singleton类并尝试访问method_name
变量。任何“ 9”陈述都会改变范围;因此,如果未在其中定义4ѭ,则该地方将不存在。
我仍然不确定您到底要完成什么,但是这是我解决您的问题的尝试:
module EventSubscriber
def method_missing(method_name,*args)
if method_name =~ /^subscribe_to_(.+)/
class << self
self
end.define_method(method_name) do |*arguments|
# ....
end
send method_name,*args
else
super
end
end
end
请注意,我还将正则表达式更改为更易于阅读的内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。