3

我需要在一些 Ruby 代码中添加一些 before_methods 和 after_methods。这样做的最佳方法是什么?

我见过这样的解决方案:

但它们不能满足我的需求。我正在寻找一种不修改现有方法的替代方法。

基本上我需要一种在调用某些方法之后/之前执行某些代码的方法。

class User
  after :some_method, call: :other_method

  def some_method
    ....
  end

  def other_method
    puts "Matz"
  end
end

提前致谢 :)

如果您需要更多解释,请告诉我。

4

2 回答 2

1
class User
  def some_method
    puts "some method"
  end
end

set_trace_func proc { |event, file, line, id, binding, classname|
  printf "%8s %s:%-2d %10s %8s\n", event, file, line, id, classname
}

user = User.new
user.some_method

#=> 
c-return test.rb:9  set_trace_func   Kernel
    line test.rb:11                    
  c-call test.rb:11        new    Class
  c-call test.rb:11 initialize BasicObject
c-return test.rb:11 initialize BasicObject
c-return test.rb:11        new    Class
    line test.rb:12                    
    call test.rb:2  some_method     User
    line test.rb:3  some_method     User
  c-call test.rb:3        puts   Kernel
  c-call test.rb:3        puts       IO
  c-call test.rb:3       write       IO
some methodc-return test.rb:3       write       IO
  c-call test.rb:3       write       IO

c-return test.rb:3       write       IO
c-return test.rb:3        puts       IO
c-return test.rb:3        puts   Kernel
  return test.rb:4  some_method     User

您可以更改 proc 以仅打印有关用户方法的信息。

于 2012-08-01T07:44:29.567 回答
-1

您是否尝试过调用它?喜欢:

def some_method
  ...
  other_method
end

def other_method
  puts "Matz"
end
于 2012-07-31T21:14:41.813 回答