如何将变量拉入单例类的作用域?

问题描述

|
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
请注意,我还将正则表达式更改为更易于阅读的内容。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...