这是字符串spec
:
"state :initial_state do
event :submit, :transitions_to => :acct_init_reviewing
end
state :paid
state :rejected"
我们需要将它转换为workflow
循环中的普通ruby代码:
workflow do
state :initial_state do
event :submit, :transitions_to => :acct_init_reviewing
end
state :paid
state :rejected
end
我们尝试eval
没有运气:
workflow do
eval(spec)
end
eval(spec)
返回nil
。如何将字符串转换为普通的ruby代码以便执行?
答案 0 :(得分:1)
eval
函数返回评估代码的结果。在这种情况下它nil
并不奇怪,因为state
可能会返回nil。
你可以构建整个事物并评估:
eval("workflow { %s }" % code)
workflow
方法可能会改变块上的绑定,因为它使得它以不寻常的方式运行,因此扩展代码以包含它可能有所帮助。
值得注意的是,使用eval
评估任意代码可能会非常危险,因此请务必确保您可以控制对此内容的影响。