`

2种使用class_eval动态定义方法的格式

阅读更多
class MyClass
  def initialize(dynamic_methods)
    @arr = Array.new(dynamic_methods)
    @arr.each{|m|
      self.class.class_eval do
        define_method(m) do |*value|
          puts value
        end
      end
    }
  end
end

tmp = MyClass.new %w(method1 method2 method3)


tmp.method1 'abc'



class MyClass
  def initialize(dynamic_methods)
    @arr = Array.new(dynamic_methods)
    @arr.each do |method|
      self.class.class_eval <<-EVAL
        def #{method}(*arguments)
          puts arguments
        end
      EVAL
    end
  end
end

tmp = MyClass.new %w(method1 method2 method3)
分享到:
评论

相关推荐

    Ruby Meta Programming: define_method or class_eval

    `define_method`方法允许我们传递一个符号和一个代码块来动态定义方法。符号作为方法名,代码块则是方法体。例如: ```ruby class MyClass define_method(:my_method) do puts "Hello, World!" end end my_...

    详解Ruby中的instance_eval方法及其与class_eval的对比

    在这个例子中,我们使用 `class_eval` 在 `A` 类上定义了一个类方法 `method1`。 综上所述,`instance_eval` 和 `class_eval` 都是非常有用的Ruby工具,但它们的应用场景有所不同。`instance_eval` 更适合于在特定...

    根据名称动态定义类对象

    2. 使用`metaclass`:元类是控制类行为的一种方式,通过定义元类,我们可以定制类的创建过程,从而实现动态定义。元类通过`__new__`和`__init__`方法控制类的生成。 3. `exec`和`eval`:这两个函数可以执行字符串...

    DataBinder.Eval总结

    `DataBinder.Eval` 的基本使用格式有以下几种: - `&lt;%# DataBinder.Eval(Container.DataItem,"字段名")%&gt;` - `&lt;%# DataBinder.Eval(Container,"DataItem.字段名")%&gt;` - `((DataRowView)Container.DataItem)[...

    eval_angle.zip

    - `class AngleEvaluator`:定义一个类,用于封装上述步骤,可能包含初始化、检测、矫正等方法。 - `void detectAndCorrectAngle(cv::Mat& image, int& angle)`:一个函数接口,接受原始图像和一个整型变量引用,...

    写公共函数文件,要使用到类,将类传参进来.rb

    在这个例子中,`extend_class`函数接收一个类`klass`作为参数,并通过`class_eval`方法向这个类添加了一个新的实例方法`say_hello`。这样,我们就可以在任何使用了`UtilityModule`的类中为它们动态添加功能。 此外...

    ruby metaprogramming examples

    5. 动态常量访问:Ruby不仅允许动态定义方法,还可以动态地访问、创建和修改常量。 6. 实例化时方法注入(Instance_eval & Class_eval):这些方法可以改变当前对象的上下文,允许你访问或修改实例变量和方法。`...

    编程之魂:Ruby中的元编程艺术

    在 Ruby 中,可以使用 `define_method` 方法在运行时动态定义方法。这种方法使得程序可以根据运行时的数据和状态来自动生成特定的行为,从而提高代码的灵活性和可复用性。 #### 代码示例 ```ruby class Greeter ...

    Portfolio_eval

    在IT行业中,尤其是在前端开发领域,CSS(Cascading Style Sheets)是一种不可或缺的技术,用于定义网页的布局和样式。"Portfolio_eval"项目可能是为展示个人或团队的项目组合而设计的一个评估工具,它可能利用了CSS...

    Ruby元编程的一些值得注意的地方

    在使用`class_eval`等方法动态定义方法时,应当明确指定方法定义的位置(即文件名和行号),以便于调试和追踪问题。这通常通过`__FILE__`和`__LINE__`两个特殊变量来实现。这样做可以确保在出现问题时,错误信息能够...

    metaprogramming_introduction:一篇以源代码形式介绍Ruby元编程基础知识的文章-Form source code

    `Module#define_method`允许我们在运行时动态定义方法: ```ruby module MyModule def define_hello(name) define_method(:hello) { puts "Hello, #{name}!" } end end extend MyModule define_hello('World') ...

    Ruby元编程第二版中文

    1. **方法定义与调用**:Ruby允许在运行时定义和修改方法,如`define_method`函数可以动态创建方法,而`send`或`__send__`则用于在运行时调用方法。 2. **类与模块操作**:Ruby的`Class.new`和`Module.new`可以用来...

    php eval函数用法总结

    在 CodeIgniter 框架中,`eval()` 被用于根据配置动态定义类。例如,在 `/system/database/DB.php` 文件中,根据 `$active_record` 的设置,`eval()` 会扩展不同的数据库类。这样的用法可以帮助简化代码结构,但同样...

    元编程 Ruby

    1. 动态方法定义:Ruby允许在运行时定义新的方法,这包括使用define_method、class_eval等方法。 2. 方法拦截:Ruby提供了method_missing方法,它允许我们拦截对当前对象中未定义方法的调用,并进行自定义处理。 3...

    Ruby-Way.rar_About Language

    例如,你可以使用`define_method`动态定义方法,或者使用`class_eval`或`instance_eval`在运行时改变类的行为。这种特性极大地增强了代码的灵活性和可扩展性。 《Ruby Way》一书还会详细介绍Ruby的Gem包管理器,Gem...

    ruby 中文文档 入门必学

    文档会讲解如何使用`send`方法动态调用方法,`class_eval`和`instance_eval`等方法改变类结构,以及定义方法的动态方式(如`define_method`)。 5. **异常处理**:Ruby中的异常处理使用`begin/rescue/ensure/end`...

    Ruby元编程pdf

    2. **方法**:Ruby的方法定义可以嵌套,并且可以动态添加或删除。`method_missing`是Ruby的一个特殊方法,当调用一个未定义的方法时,系统会自动调用它,允许开发者处理未知的方法调用。 3. **变量**:Ruby的变量...

    ruby入门教程

    例如,你可以使用`define_method`动态定义方法,或者使用`class_eval`或`instance_eval`来执行字符串中的代码,这在编写灵活的框架或库时非常有用。 此外,Ruby的标准库非常丰富,提供了大量实用的模块和函数。例如...

Global site tag (gtag.js) - Google Analytics