3

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たびに を自動的に呼び出すことは可能ですか? によって暗黙的に呼び出されるようなものですが、より一般化されています。psome_outside_method(p)to_sputs

4

1 に答える 1

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

しかし、しないでください。シンプルなコードは、簡潔で「賢い」コードよりも優れています。

于 2013-05-04T18:15:36.537 に答える