以下是我要做的事情:用户输入一个字符串。该字符串包含2个部分,如下所示:
{EventClass: someMethod=>arg1, arg2, arg3....}, {Action: someMethod=>arg1, arg2, arg3....}
具体的例子是:
{TwitterEvent: newTweet=>arg1, arg2, arg3....}, {PersistenceAction: saveToHardDrive=>arg1 arg2...}
然后我将解析此字符串,实例化TwitterEvent
的实例,在其上调用该方法。然后对PersistenceAction
此类应用的最佳“设计”是什么?如何从解析后的字符串动态实例化类,然后调用方法?可能,该方法会有参数?我如何检测/处理错误?
答案 0 :(得分:1)
从名称字符串中获取类对象:
Kernel.const_get('TwitterEvent')
在对象上调用任意方法:
event.send(:new_tweet)
剩下的由你决定。 : - )
答案 1 :(得分:1)
您想使用respond_to? and send 。发送允许您使用符号调用方法。您可以使用to_sym将字符串转换为符号。
答案 2 :(得分:0)
你去吧
str = "{TwitterEvent: newTweet=>arg1, arg2, arg3}, {PersistenceAction: saveToHardDrive=>arg1, arg2}"
regexp = /^{(\w+):\s*(\w+)=>([^}]+)},\s*{(\w+):\s*(\w+)=>([^}]+)}$/
regexp.match(str).to_a[1..-1].each_slice(3) do |s|
# s[0] .. class name
# s[1] .. class method
# s[2] .. method parameters as a single string
# do something similar to Sergio Tulentsev suggestion
end