在私有方法中动态创建一个公共方法

加仑

我在一个类中使用动态创建方法的类中的代码define_method我想将其分为两部分,以使代码更易于理解。我需要将部分代码放入私有块中。

这是我的代码的外观:

class Foo
  ["bar", "baz"].each do |method|
     create_method(method)
  end

  private
  def create_method(name)
    define_method(name) do
      puts "HELL"
    end
  end
end

Foo.new.bar

Foo:Class的'create_method'(NoMethodError)

我不明白为什么它不起作用。

约格午间

您的代码有几个问题。您得到的错误与private与之完全无关public错误消息说create_method找不到该方法这有两个原因:

  1. 您正在定义它之前调用它。您需要create_method 定义之后将呼叫移至
  2. create_method被定义为实例方法,即用于在的实例调用它Foo,但您是在Foo自身上调用它你必须将它定义为一个方法某处Foo的类(即Class它的祖先),一个(例如Module),或Foo的单例类。

我将在Foo这里将其定义为单例方法,但是如果该方法确实像您在示例中所展示的那样通用,则它可能属于其中Module

class Foo
  class << self
    private
    def create_method(name)
      define_method(name) do
        puts "HELL"
      end
    end
  end

  ["bar", "baz"].each do |method|
     create_method(method)
  end
end

Foo.new.bar
# HELL

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

一个人如何将值从私有方法返回到公共方法

Java - “拦截”一个私有方法

在 rxjs 中调用另一个私有方法的 next 方法

在私有方法中模拟公共方法

从私有方法中的另一个类访问对象

私有方法优于公共方法

从同一类中的公共方法调用私有方法

解决打字稿的另一个私有方法中的函数内私有方法调用的范围

使用CoffeeScript在“私有方法”中获取“公共变量”

继承私有方法和公共

Python 公共和私有方法

OOP:为什么调用一个公共方法,然后调用具有相同参数的私有方法?

有什么办法可以在Junit5的另一个方法中模拟私有方法调用

当我将变量传递给golang中的私有方法时,它会创建一个新实例吗?

在接口Java中创建私有方法的正确方法

为什么我要在另一个实例上调用私有方法?

为什么从另一个类执行此私有方法?

将公共方法转换为私有方法

在 JavaScript 中的公共方法中获取私有方法值

Python 中公共方法和私有方法之间的重构

C#:无法在私有方法中访问公共方法

如何访问在公共方法中声明的变量以便在私有方法中使用它

我如何才能在自己的类中制作一个私有方法,以便一遍又一遍地使用

我的私有方法如何在C ++中访问公共枚举?

在Perl 6中的类中使用公共和私有方法

在Raku中测试私有方法

在Groovy中测试私有方法

服务层中的私有方法

继承中的私有方法