每当调用实例时自动调用方法

时间:2013-05-04 18:12:15

标签: ruby

我有几个类,例如P,它们共享相同的实例方法some_method

class P
  ...
  def some_method
    @id
  end
end

这些类的实例将在许多地方用作参数:

p = P.new
q = Q.new
...

def some_outside_method(p,q,r,s)
  another_outside_method(p.some_method, q.some_method, r.some_method, s.some_method)
end

我想知道是否有更优雅的写作方式。是否可以在p引用some_method时自动致电p some_outside_method(p)?它类似于to_s puts隐式调用,但更为笼统。

1 个答案:

答案 0 :(得分:3)

您可以通过执行此操作来减少重复,例如:

def some_outside_method(p,q,r,s)
  args = [p, q, r, s].map{|o| o.send(:some_method)}
  another_outside_method(*args)
end

或者更简单地说:

def some_outside_method(*args)
  args = args.map(&:some_method)
  another_outside_method(*args)
end

或者更简单地说:

def some_outside_method(*args)
  another_outside_method args.map(&:some_method)
end

但不要。简单的代码比简洁的和“聪明的”更好。