ruby 连续方法调用的动态分派
ruby dynamic dispatch with consecutive method call
我在 Ruby
中对某个对象执行动态调度时遇到一个小问题
我想调用一个方法,但是多次调用才能获取
即:dynamic_string = 'my_object.other_object.this_method'
我想在从 my_object.other_object
获得的 other_object
上调用 this_method
这是我的 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>>
据我了解,发送方法试图调用 a
对象上的垃圾方法 b.this
。
我知道要让它工作,我必须进行这些连续调用:
a.send('b').send('this')
但我不知道如何动态地制作它
如何实现连续动态调用? (在这个例子中,我只需要 2 次调用,但如果可能的话,我想要一个更通用的解决方案,它适用于所有调用次数)
试试这个:
a = A.new
methods_ary = dynamic_string.split('.')
methods_ary.inject(a) { |r, m| r.send(m) }
我在 Ruby
中对某个对象执行动态调度时遇到一个小问题我想调用一个方法,但是多次调用才能获取
即:dynamic_string = 'my_object.other_object.this_method'
我想在从 my_object.other_object
other_object
上调用 this_method
这是我的 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>>
据我了解,发送方法试图调用 a
对象上的垃圾方法 b.this
。
我知道要让它工作,我必须进行这些连续调用:
a.send('b').send('this')
但我不知道如何动态地制作它
如何实现连续动态调用? (在这个例子中,我只需要 2 次调用,但如果可能的话,我想要一个更通用的解决方案,它适用于所有调用次数)
试试这个:
a = A.new
methods_ary = dynamic_string.split('.')
methods_ary.inject(a) { |r, m| r.send(m) }