代码之家  ›  专栏  ›  技术社区  ›  doremi

如何将Ruby中的method转换为proc&method用法

  •  4
  • doremi  · 技术社区  · 7 年前

    Foo::Bar.logger.debug(a)
    Foo::Bar.logger.debug(b)
    Foo::Bar.logger.debug(c)
    

    &method 方法:

    [a, b, c].each(&method(:'Foo::Bar.logger.debug'))
    

    .debug 不响应 .to_proc

    NameError: undefined method `Foo::Bar.logger.debug' for class `#<Class:Foo>'
    

    这确实有效;然而,但并不像前者那样简洁:

    logger = Proc.new { |x| Foo::Bar.logger.debug(x) }                                                                                                           
    [a, b, c].each(&logger)
    

    前一种方法可行吗?

    1 回复  |  直到 7 年前
        1
  •  7
  •   mu is too short    6 年前

    method 方法不正确。从 fine manual :


    在中查找作为接收器的命名方法 obj公司 ,返回 Method NameError ).

    你通常会说

    m = some_obj.method(:some_method_name)
    

    m

    method(:Foo::Bar.logger.debug)
    

    应该给你一个 TypeError 因为因为 :Foo 是一个符号,而不是一个类或模块,并试图应用 ::

    method(':Foo::Bar.logger.debug')
    

    因为这会产生你看到的错误。假设是这样,那么实际上您正在尝试获取对名为 ':Foo::Bar.logger.debug' self .

    如果您想要引用 debug Foo::Bar.logger

    Foo::Bar.logger.method(:debug)
    

    结合你的 to_proc & ):

    [a, b, c].each(&Foo::Bar.logger.method(:debug))