`

method_missing(name, *args) 用法 Proxy

阅读更多
class User
class << self
    def say_hello(name)
        puts name + ' hello'
    end
end
end

class UserProxy
   # 加入类方法
    def self.method_missing(name, *args)
        User.send(name, *args)
    end
   
   # 加入实例方法
    def method_missing(name, *args)
        User.send(name, *args)
    end
end

UserProxy.say_hello('hlxwell')
up = UserProxy.new
up.say_hello('hlxwell')
分享到:
评论
1 楼 Hooopo 2009-06-21  
nice...
不过用method_missing优先级太低(在继承,mixin,甚至top level之后.. )

class User
class << self
    def say_hello(name)
        puts name + ' hello' 
    end
end
end
module UserModule
  def say_hello name
    puts name + ' hello from Module'
  end
end

class UserProxy
   #混入实例方法
   include UserModule
   # 加入类方法
    def self.method_missing(name, *args)
        User.send(name, *args)
    end
   
   # 加入实例方法
    def method_missing(name, *args)
        User.send(name, *args)
    end
end
#混入类方法
UserProxy.extend UserModule
UserProxy.say_hello('hlxwell')
up = UserProxy.new
up.say_hello('hlxwell')
#hlxwell hello from Module
#hlxwell hello from Module


相关推荐

    __VA_ARGS__用法

    ### __VA_ARGS__ 的使用详解 #### 一、引言 在软件开发过程中,调试信息的输出至关重要。它能够帮助开发者快速定位问题所在,并且理解程序执行的具体情况。常见的调试信息输出方式包括使用 `printf`、`fprintf`、`...

    ruby元编程之method_missing的一个使用细节

    当我们试图调用`obj.unknown_method`时,由于`unknown_method`不存在于`MyClass`中,因此触发了`method_missing`方法,从而输出了 `"unknown_method is not defined!"`。 接下来,我们来看一个可能导致死循环的情况...

    Python可变参数*args和**kwargs用法实例小结

    在Python编程中,`*args` 和 `**kwargs` 是两个非常有用的语法特性,它们允许函数接收可变数量的参数。这些参数在函数定义时并不知道具体的数量,因此在需要处理不确定参数个数的情况时非常有用。本文将深入探讨这两...

    Ruby元编程之梦中情人method_missing方法详解

    当需要根据某些条件改变方法行为时,依然可以使用`define_method`,结合条件判断,如例子中`what_is_#{name}`方法所示,这样可以确保只有在类A响应特定方法时才执行。 尽管`define_method`在大多数情况下更为高效,...

    Python中new方法的详解

    在Python编程语言中,`__new__`是一个特殊方法,它是类实例化过程中的关键环节。`__new__`主要用于创建对象,而`__init__`则是用来初始化新创建的对象...理解并恰当使用这两个方法对于编写复杂的Python类结构至关重要。

    Python中*args和**kwargs的区别详解

    一、*args的使用方法 *args 用来将参数打包成tuple给函数体调用 def args_test(x, y, *args): print(x, y, args) args_test(1,2,3,4,5) 1 2 (3, 4, 5) 二、**kwargs的使用方法 **kwargs 打包关键字参数成dict给...

    python函数参数*args**kwargs用法实例

    # 当函数的参数不确定时,可以使用*args和**kwargs。*args没有key值,**kwargs有key值 def fun_var_args(farg, *args): print ‘args:’, farg for value in args: print ‘another arg:’,value # *args可以当作...

    Python 中的*args 和**kwargs

    当同时使用 `*args` 和 `**kwargs` 时,`*args` 必须放在 `**kwargs` 之前,因为位置参数(元组)必须先于关键字参数(字典)出现。如果需要同时使用这两种参数,可以这样定义函数: ```python def func_with_both...

    深入理解Python中的args和kwargs及其应用

    - **类初始化**:在类的`__init__`方法中,可以使用`*args`和`**kwargs`来接收任意数量的初始化参数。这对于创建高度可配置的类非常有帮助。 ```python class Person: def __init__(self, *args, **kwargs): ...

    va_args_count:使用AC宏在C99 __VA_ARGS__宏中查找参数的数量

    直接使用VA_ARGS_COUNT()宏以int返回传递给它的参数数量。 printf("There are %i arguments.\n", VA_ARGS_COUNT(1, "two", 3.0)); 计数功能参数 就其本身而言,这不是很有用。 当在其他可变参数宏中使用VA_ARGS_...

    # ##和 VA ARGS

    在C/C++编程语言中,`#`、`##` 和 `__VA_ARGS__` 是预处理器宏中的特殊符号,它们在处理可变参数宏时起着关键作用。本文将详细探讨这三个符号以及它们在可变参数函数中的应用。 ### 1. `#` 符号 `#` 符号在宏定义...

    python面试宝典基础篇2023

    这种方法使用了元类来实现单例模式,通过重写元类的 `__call__` 魔术方法来改变类的构造器。 单例模式的应用场景 单例模式的应用场景有很多,例如: * 数据库连接池对象 * 配置对象 * 日志操作对象 单例模式可以...

    Python *args和**kwargs用法实例解析

    一、*args的使用方法 *args 用来将参数打包成tuple给函数体调用 def fun(*arg): print(arg,type(arg)) print(*arg) fun(1,2,[8,9]) (1, 2, [8, 9]) 2 [8, 9] 并不一定必须是args,也可以是别的,但是官方不建议...

    Single_method.zip

    在Python编程中,单例模式是一种设计模式,用于确保一个类只有一个实例,并提供一个全局...元类实现则更底层,适用于需要自定义类行为的场景,但使用起来较为复杂。选择哪种方式取决于具体项目需求和代码的可维护性。

    python部分函数速查表

    Python部分函数,也称为偏...这个速查表应该包含各种常见的部分函数用法,以及相关的例子和技巧,对于理解和应用Python部分函数非常有帮助。无论你是初学者还是经验丰富的开发者,都应该将其视为一个有价值的参考资料。

    ruby元编程之创建自己的动态方法

    def method_missing(method_name, *args) # 在这里处理未定义方法的逻辑 end end obj = MyClass.new obj.some_undefined_method # 触发method_missing ``` **实际应用**: 在Rails框架中,`method_missing`被...

    Python函数中*args和**kwargs来传递变长参数的用法

    单星号形式(*args)用来传递非命名键可变参数列表。双星号形式(**kwargs)用来传递键值可变参数列表。 下面的例子,传递了一个固定位置参数和两个变长参数。 def test_var_args(farg, *args): print formal arg:, ...

Global site tag (gtag.js) - Google Analytics