`
guodongbuding
  • 浏览: 38679 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Module define_method

 
阅读更多
define_method(symbol) { block } => proc

Defines an instance method in the receiver. The method parameter can be a Proc or Method object. If a block is specified, it is used as the method body. This block is evaluated using instance_eval, a point that is tricky to demonstrate because define_method is private. (This is why we resort to the send hack in this example.)

   class A
     def fred
       puts "In Fred"
     end
     def create_method(name, &block)
       self.class.send(:define_method, name, &block)
     end
     define_method(:wilma) { puts "Charge it!" }
   end
   class B < A
     define_method(:barney, instance_method(:fred))
   end
   a = B.new
   a.barney
   a.wilma
   a.create_method(:betty) { p self }
   a.betty

produces:

   In Fred
   Charge it!
   #<B:0x401b39e8>

分享到:
评论

相关推荐

    patch_def_ruby_Metaprogramming_Before_

    define_method(method_name) do |*args| send(before_method, *args) if respond_to?(before_method) original_method.bind(self).call(*args) end end end ``` 在这个实现中,`instance_method`用于获取原始...

    8192CU LINUX驱动

    #define RTL871X_MODULE_NAME "92CU" #define DRV_NAME "rtl8192cu" #define CONFIG_USB_HCI 1 #define CONFIG_RTL8192C 1 #define PLATFORM_LINUX 1 //#define CONFIG_IOCTL_CFG80211 1 #ifdef CONFIG_IOCTL_...

    ruby metaprograming

    def self.method_missing(name, *args) puts "Called method: #{name}" end my_object = MyClass.new my_object.some_method # 输出: "Called method: some_method" ``` ##### 2. eval `eval`函数可以用来执行一...

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

    在这里,`send`方法接收一个符号(`method_name`)并将其转换为对`my_method`的调用。 Ruby还支持`instance_eval`和`class_eval`,它们会改变上下文。`instance_eval`将给定的代码块当作对象的实例方法来执行,而`...

    label_break_ruby_Metaprogramming_

    `Module#define_method`用于动态定义方法,`Object#methods`和`Object#instance_variables`则分别用于查看对象的方法列表和实例变量。 例如,如果我们想为数组添加一个新的方法,允许我们查找最小值,可以这样做: ...

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

    def method_missing(method_name, *args, &block) if method_name.to_s.start_with?("get_") attribute_name = method_name.to_s[4..-1] puts "Fetching #{attribute_name}" @attributes[attribute_name] else...

    Ruby语言入门教程&代码示例.zip

    define_method(:my_method) do puts "Inside my_method" end end my_object = MyClass.new my_object.my_method # 输出:Inside my_method ``` 以上就是Ruby语言的基础知识和关键特性,通过深入学习和实践,你...

    Ruby元编程技术详解(Ruby Metaprogramming techniques)

    10. `Module#define_method` 和 `Module#method_missing`: `define_method`用于在运行时定义实例方法,而`method_missing`是一个回调方法,当尝试调用不存在的方法时会被触发,这可以用来实现自定义错误处理或动态...

    Ruby中钩子方法的运用实例解析

    - `Module#method_added`, `Module#method_removed`, `Module#method_undefined`: 这些方法分别在类或模块添加、删除或未定义新方法时被调用。 2. 单件类相关的钩子方法: - `BasicObject#singleton_method_added...

    Programming Ruby

    `class 语法用于自定义类的实例方法,`define_method` 可以动态定义方法,而`Module#define_singleton_method`则能为单例对象定义方法。这些特性使Ruby成为构建框架和库的理想选择。 **标准库和Gem** Ruby的标准库...

    简要解读Ruby面向对象编程中的作用域

    通过使用`Class.new`、`Module#define_method`和`Module.new`等方法来替代传统的`class`、`def`和`module`,可以实现跨越作用域边界访问变量。例如,以下代码展示了如何在类定义内部访问外部的局部变量`my_var`: `...

    paramix:参数混合

    module M include Paramix::Parametric paramaterized do |params| define_method :params do params end end def hello "Hello, %s!" % [params[:name]] endendclass X include M[:name=&gt;'Charlie']endX.new.hello...

    ruby2.1.6安装文件

    9. **元编程增强**:Ruby的元编程能力进一步提升,如`Module#define_method`和`Module#module_function`等方法的改进,使得在运行时修改类和模块的行为更加灵活。 10. **错误处理**:错误处理机制得到了改进,新的...

    Understanding Ruby's Object Model

    元编程能力允许我们编写代码来操纵代码本身,例如`define_method`可以动态定义方法。 9. **常量(Constants)** 常量以大写字母开头,一旦被赋值,其值在整个作用域内是不可变的。然而,常量的引用路径可能改变,...

    oo_lesson_5

    例如,`define_method`可以用来定义方法: ```ruby def add_method(name, &block) define_method(name, &block) end add_method :greet do puts "Greetings!" end object.greet ``` 7. 模块(Module):...

    Direct Memory Access in Linux.doc

    - **Module Initialization**: When initializing the module, use `ioremap()` or `remap_pfn_range()` to map the desired physical memory region into the kernel’s virtual address space. Ensure that the ...

    内存加载dll

    #define __MEMORY_MODULE_HEADER #include typedef void *HMEMORYMODULE; typedef void *HMEMORYRSRC; typedef void *HCUSTOMMODULE; #ifdef __cplusplus extern "C" { #endif typedef HCUSTOMMODULE (*...

    ruby元编程实际使用实例

    示例中的`Frigga::RPC::#{rpc_class}`引用的是一个类方法,而`define_method`和`alias`则在`Runner`类的实例上下文中使用,这意味着它们定义的是实例方法。 8. **Global Variables**: 使用`@@rpc_list`作为全局...

    Metaprogramming ruby

    2. **方法定义和调用**:Ruby支持多种方法定义方式,如`def`关键字、`define_method`、`method_missing`等。其中,`method_missing`是一个特殊的方法,用于处理未定义的方法调用,是实现动态行为的重要工具。 3. **...

    Ruby元编程第二版中文

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

Global site tag (gtag.js) - Google Analytics