是否可以存储Ruby命令并在以后执行其输出?

Nin*_*a2k 1 ruby ruby-on-rails

我试图做一些不寻常的事情作为另一个问题的解决方法.我想存储ruby命令并在以后执行它们.

我可以将命令存储在变量ok中,但我只能将它们打印到屏幕上,我玩弄扁平以查看是否可以以某种方式将它们转换为可用的形式,但它不起作用.

这是一个例子:

Command_Store = Array[puts "Hello World", my_first_array = array.new, puts "Hello World again"]

execute.Command_Store[0] => Hello World 
execute.Command_Store[1] => my.first_array[] 
execute.Command_Store[2] => Hello World again
Run Code Online (Sandbox Code Playgroud)

meg*_*gas 8

您还可以将lambda用于此类任务:

command_store = []
command_store << lambda { puts "Hello World" }
command_store << lambda { my_first_array = Array.new }
command_store << lambda { puts "Hello World again" }

command_store.each(&:call) 
#=> Hello World
#=> Hello World again
Run Code Online (Sandbox Code Playgroud)

更新:

你可以捕获变量my_first_array,这就是所谓的闭包

my_first_array = [3,4,5,6,7]

command_store << lambda { puts my_first_array[0] }

command_store.each(&:call)
#=> ...
#=> 3
Run Code Online (Sandbox Code Playgroud)


Bri*_*new 5

为什么不使用标准函数eval()

例如(来自链接的文章)

code = "Time.now"
result = eval(code)
puts result
Run Code Online (Sandbox Code Playgroud)