我有几个类,例如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
隐式调用,但更为笼统。
答案 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
但不要。简单的代码比简洁的和“聪明的”更好。