Нет, не встроенный способ сделать это. То, что вы сделали, достаточно просто и кратко, не говоря уже об опасности. Будьте осторожны при использовании.
С другой стороны, это можно расширить и на аргументы:
class Object
def send_chain(*args)
o=self
args.each do |arg|
case arg
when Symbol, String
o = o.send arg # send single symbol or string without arguments
when Array
o = o.send *arg # smash the inner array into method name + arguments
else
raise ArgumentError
end
end
return o
end
end
это позволит вам передать имя метода с его аргументами в массив, например;
test = MyObject.new
test.send_chain :a_method, [:a_method_with_args, an_argument, another_argument], :another_method