我为一个能够运行ruby脚本的软件做了一个基本的REPL。我希望能够在启动时将变量从先前的范围传递到REPL,因此我可以轻松地调试我的代码。
def launchREPL(locals)
puts "\"Starting REPL...\""
__b = binding #Evaluating in a binding, keeps track of local variables
__s = ""
__b.local_variables = locals ## <-- ERROR OCCURS HERE
bStartup = true
while bStartup || __s != ""
# If startup required skip evaluation step
if !bStartup
#Evaluate command
begin
__ret = __s + "\n>" + __b.eval(__s).to_s
rescue
__ret = __s + "\n> Error: " + $!.to_s
end
puts __ret
else
#REPL is already running
bStartup = false
end
#Read user input & print previous output
__s = Application.input_box(__ret,"Ruby REPL","")
__s == nil ? __s = "" : nil
end
end
以上是我启动REPL的代码。这个想法是我能做到的:
launchREPL(Kernel.local_variables)
然后能够访问REPL中前一个范围内的所有局部变量。
但是我收到错误'local_variables' of '__b' is not defined
。有什么方法可以解决这个问题吗?
由于
答案 0 :(得分:0)
稍后进行一些测试,我想出了这个:
__b.eval("locals = #{locals}")
然而......我已经意识到这只会返回局部变量的名称而不是变量的值......