有没有一种方法来在Ruby中修饰一个函数,因为它是在Python中完成的?也就是说,在每个函数的开头(和结尾?)执行一些操作。在Ruby中的函数装饰器,如在Python中
喜欢这个:http://programmingbits.pythonblogs.com/27_programmingbits/archive/50_function_decorators.html
有没有一种方法来在Ruby中修饰一个函数,因为它是在Python中完成的?也就是说,在每个函数的开头(和结尾?)执行一些操作。在Ruby中的函数装饰器,如在Python中
喜欢这个:http://programmingbits.pythonblogs.com/27_programmingbits/archive/50_function_decorators.html
如果函数你的意思是关闭,你可以使用块:
def foo
puts 'before code'
yield
puts 'after code'
end
foo { puts 'here is the code' }
虽然有没有像'@ wrapper'语法? – tekknolagi
看起来像这里有一个注释宝石:http://rubygems.org/gems/annotation – seph
你可能会发现这篇文章和随后的讨论有趣:http://yehudakatz.com/2009/07/11/python-decorators -in-ruby/ – seph
的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
做一些为你处理。
Python的装饰语法(这可能不是正是你正在寻找效仿功能)可以在Ruby中通过混合来实现如Luke Redpath在“Decorator Pattern with Ruby in 8 lines”中简洁描述的那样修改装饰类的方法的模块。
我认为一个例子会有所帮助(特别是对于我们这些不太熟悉python的人) –
啊,我的意思是函数装饰器。对不起!我将添加一个示例 – tekknolagi