如何将字符串转换为纯红宝石代码?

时间:2016-03-31 19:31:40

标签: ruby

这是字符串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代码以便执行?

1 个答案:

答案 0 :(得分:1)

eval函数返回评估代码的结果。在这种情况下它nil并不奇怪,因为state可能会返回nil。

你可以构建整个事物并评估:

eval("workflow { %s }" % code)

workflow方法可能会改变块上的绑定,因为它使得它以不寻常的方式运行,因此扩展代码以包含它可能有所帮助。

值得注意的是,使用eval评估任意代码可能会非常危险,因此请务必确保您可以控制对此内容的影响。