ruby动态调度与连续方法调用

时间:2018-05-09 10:20:36

标签: ruby dynamic-dispatch

我在Ruby中的某个对象上执行动态调度时遇到了一个小问题

我想调用一个方法,但我只能使用多个调用来获取它

即:parent_id

我想致电dynamic_string = 'my_object.other_object.this_method' this_method other_object来自my_object.other_object

这是我的MCVE:

class A
    attr_reader :b
    def initialize
        @b = B.new
    end
end
class B
    def this
        'i want this dynamically'
    end
end

a = A.new
a.b.this # => 'i want this dynamically'
dynamic_string = 'b.this'
a.send(dynamic_string) # => error below

NoMethodError: undefined method 'b.this' for #<A:0x000000025598b0 @b=#<B:0x00000002559888>>

根据我的理解,send方法试图在b.this对象上调用litteral方法a

我知道要让它工作,我必须连续拨打电话:

a.send('b').send('this')但我无法弄清楚如何动态制作

如何实现连续动态调用? (在这个例子中,我只需要2次调用,但如果可能的话,我想要一个更通用的解决方案,这将适用于每次调用)

1 个答案:

答案 0 :(得分:3)

试试这个:

a = A.new
methods_ary = dynamic_string.split('.')
methods_ary.inject(a) { |r, m| r.send(m) }