接受由 add_to_class 定义的方法的参数

实例方法可以通过插件使用 add_to_class 添加到类中,其定义如下:

def add_to_class(class_name, attr, &block)
  reloadable_patch do |plugin|
    klass = class_name.to_s.classify.constantize rescue class_name.to_s.constantize
    hidden_method_name = :"#{attr}_without_enable_check"
    klass.public_send(:define_method, hidden_method_name, &block)

    klass.public_send(:define_method, attr) do |*args|
      public_send(hidden_method_name, *args) if plugin.enabled?
    end
  end
end

是否已有现成的方式可以实现类似的功能,即定义的方法接受参数?

add_to_class(Guardian, :ensure_user_can_access_report, group, report) do
  ...
end

这看起来正是你在寻找的内容,是个很好的示例。

所以,基本上,你需要将这些参数作为 lambda 本身的参数。

是的,完全正确。谢谢!

你也可以用 Ruby 的方式来做同样的事情。