2012-09-06 24 views
3

有没有一种方法来在Ruby中修饰一个函数,因为它是在Python中完成的?也就是说,在每个函数的开头(和结尾?)执行一些操作。在Ruby中的函数装饰器,如在Python中

喜欢这个:http://programmingbits.pythonblogs.com/27_programmingbits/archive/50_function_decorators.html

+3

我认为一个例子会有所帮助(特别是对于我们这些不太熟悉python的人) –

+0

啊,我的意思是函数装饰器。对不起!我将添加一个示例 – tekknolagi

回答

4

如果函数你的意思是关闭,你可以使用块:

def foo 
    puts 'before code' 

    yield 

    puts 'after code' 
end 

foo { puts 'here is the code' } 
+0

虽然有没有像'@ wrapper'语法? – tekknolagi

+1

看起来像这里有一个注释宝石:http://rubygems.org/gems/annotation – seph

+1

你可能会发现这篇文章和随后的讨论有趣:http://yehudakatz.com/2009/07/11/python-decorators -in-ruby/ – seph

2

alias_method工具可用于实现这样的效果:

alias_method :old_foo, :foo 
def foo 
    # ... before stuff ... 
    r = old_foo 
    # ... after stuff ... 
    return r 
end 

在Ruby on Rails的,您可以使用alias_method_chain做一些为你处理。

0

Python的装饰语法(这可能不是正是你正在寻找效仿功能)可以在Ruby中通过混合来实现如Luke Redpath在“Decorator Pattern with Ruby in 8 lines”中简洁描述的那样修改装饰类的方法的模块。

+0

对象的装饰器模式不同于Python的装饰器功能的函数和方法。 – mipadi

+0

您是否介意为我的利益简要概述差异? =) – Chazu

+1

装饰器设计模式用于动态地为现有类添加功能。 Python函数修饰器修改函数或方法的行为。 – mipadi