在Ruby中,可以使用instance_variables
方法获取所有实例变量,local_variables
方法获取所有局部变量,global_variables
方法获取所有全局变量。
例如,以下代码将输出当前作用域中的所有变量:
instance_variables.each do |ivar|
puts "#{ivar} = #{instance_variable_get(ivar)}"
end
local_variables.each do |lvar|
puts "#{lvar} = #{eval(lvar.to_s)}"
end
global_variables.each do |gvar|
puts "#{gvar} = #{eval(gvar.to_s)}"
end
需要注意的是,这些方法只能获取到当前作用域中的变量,无法获取到其他作用域中的变量。如果需要获取其他作用域中的变量,需要使用binding
方法获取其他作用域的绑定对象,然后使用eval
方法在该作用域中执行代码。
例如,以下代码将输出当前作用域和其他作用域中的所有变量:
def print_variables(binding)
instance_variables.each do |ivar|
puts "#{ivar} = #{instance_variable_get(ivar)}"
end
local_variables.each do |lvar|
puts "#{lvar} = #{eval(lvar.to_s)}"
end
global_variables.each do |gvar|
puts "#{gvar} = #{eval(gvar.to_s)}"
end
end
# 在其他作用域中调用print_variables方法
other_binding = binding
print_variables(other_binding)
领取专属 10元无门槛券
手把手带您无忧上云