3

有没有办法像在 Python 中那样在 Ruby 中装饰函数?也就是说,在每个函数的开头(和结尾?)执行某些操作。

像这样: http: //programmingbits.pythonblogs.com/27_programmingbits/archive/50_function_decorators.html

4

3 回答 3

4

如果按功能表示闭包,则可以使用块:

def foo
  puts 'before code'

  yield

  puts 'after code'
end

foo { puts 'here is the code' }
于 2012-09-06T16:38:44.863 回答
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它为您做一些事情。

于 2012-09-06T16:23:38.870 回答
0

Python 的装饰器语法(可能不完全是您要模拟的功能)可以在 ruby​​ 中通过混合一个修改装饰类的方法的模块来实现,如“使用 Ruby 的 8 行装饰器模式”中简洁描述的那样卢克·雷德帕斯。

于 2012-09-06T16:42:03.240 回答