ruby - 检测方法何时被链接

标签 ruby

我想做一些方法链接。我有以下代码:

class MyClass

  attr_accessor :handler

  def do_a
    puts 'i just did a'
    self.handler = 'a'
    self
  end

  def do_b_if_a
    puts 'i just did b' if handler == 'a'
  end

 end

所以下面的工作:

irb > test = MyClass.new
=> #<MyClass:0x007fa44ced9a70 @handler=nil>
irb > test.do_a
'i just did a'
irb > test.do_a.do_b_if_a
'i just did a'
'i just did b'

我不想工作的是当我第一次调用 do_a 时设置处理程序,这意味着现在可以随时调用 do_b_if_a。但我只希望它在与 do_a 链接时被调用,我该怎么做?

最佳答案

通常,您不想关心(在大多数情况下,您甚至不知道)您的方法是否以某种方式被调用。那就是疯狂。神奇的调用序列让调试和测试变得非常困难。

不过,你可以做什么...不是让 do_a 返回 self,而是在它周围包装一个定义 do_b 的装饰器,并且返回装饰器。那时,您原来的 MyClass 不能do_b,因为它不知道怎么做。但是从 do_a 返回的东西可以。

(现在,您仍然可以像 a = test.do_a 这样说,然后是 a.do_b,但是如果不解析 Ruby 代码,您就无法真正解决这个问题自己。)

关于ruby - 检测方法何时被链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10002133/

相关文章:

ruby - Capifony 数据库函数失败并显示 `require' : cannot load such file -- FileUtils (LoadError)

ruby-on-rails - 设计从 gem 而不是生成的渲染默认 View ?

ruby - 获取两个日期之间的差异

ruby-on-rails - 临时文件和垃圾收集

ruby - 无法通过 rvm 安装 compass

ruby - 将数组拆分为 m 大小的 n 组?

ruby - 在 Rails 中创建新记录时如何自动设置字段的值

ruby-on-rails - 您要查找的页面不存在 - heroku+rails

ruby-on-rails - ruby rails : A way to save currency into a column within a database-table

ruby-on-rails - 尝试在闪现消息中进行段落分隔\n 不起作用