¿Hay alguna manera de acceder a todo en la tabla de símbolos en Ruby? Quiero poder serializar o guardar el estado actual de una ejecución de un programa. Para hacer esto, parece que necesito poder iterar sobre todas las variables en el alcance.¿Cómo se accede a la tabla de símbolos en Ruby?
Respuesta
Creo que proviene de un fondo perl, y que le gustaría obtener todas las variables definidas en un script y serializarlas. De esta forma, cuando cargue el archivo, él los recuperará. Todavía estoy buscando información sobre cómo obtener una lista de las variables, pero la serialización se realizará utilizando Marshal.dump y su lectura se realizará con Marshal.load. Editaré la publicación una vez que descubra cómo obtener una lista de todas las variables definidas.
EDIT: lo encontró!
Usted puede obtener una lista de todas las variables por llamar a estos métodos:
local_variables
global_variables
Y si aún no lo ha conseguido su código de serialización, sugeriría algo como esto:
- crear una clase o instancia de Struct que contiene un nombre de variable y el valor de la variable y los agrega en una matriz:
local_variables.each {|var| my_array << MyVarObject.new(var,eval(var)) } # eval is used to get the value of the variable
y luego serializar la matriz:
data = Marshal.dump(my_array)
File.open("myfile.ser","w") do |file|
file.puts data
end
No creo que exista, pero siempre se puede usar marshall volcado/carga.
Si he entendido su pregunta correctamente - que le gustaría ver a todos los símbolos en su programa a continuación, el siguiente debe hacer el truco:
puts Symbol.all_symbols.inspect
El método de la clase “all_symbols” va a devolver una matriz de cada Símbolo actualmente en el programa.
Sí, esto es cierto. Curiosamente, devuelve símbolos que no están definidos también: 'ZZZ' no está definido. 'ZZZ; Symbol.all_symbols' incluye' ZZZ'. –
- 1. Ruby/Rails - ¿Accede a una tabla de "búsqueda" sin modelarla?
- 2. ¿Cómo se accede a ARGV en Mathematica?
- 3. ¿Cómo reconstruyo periódicamente una tabla de informes a la que se accede con frecuencia?
- 4. Tabla de símbolos en Python
- 5. Acceso a la tabla de símbolos ELF en C
- 6. ¿Cómo se accede a métodos de clases protegidos desde métodos de instancia en Ruby?
- 7. Accediendo a la tabla de símbolos activa en Common Lisp
- 8. ¿Cómo se accede a dos bases de datos en Grails
- 9. ¿Cómo se accede a los parámetros de función en Perl?
- 10. ¿Cómo se accede a un atributo de modelo en jquery?
- 11. Cómo hacer una tabla de símbolos
- 12. ruby: ordena la matriz de símbolos
- 13. la tabla de símbolos: borrar entradas
- 14. ¿Cómo se accede a 'NameThreadForDebugging' en Delphi 2010
- 15. ¿Cómo se accede a ConcurrentDictionary y cómo serializarlo?
- 16. ¿Qué es la tabla de símbolos y cómo se integra en el ejecutable?
- 17. ¿Hay un Python equivalente a los símbolos de Ruby?
- 18. gdb: "No se ha cargado ninguna tabla de símbolos"
- 19. ¿Cómo se accede a los datos de textura en la GPU en OpenGL?
- 20. C# eventos: cómo las variables se accede
- 21. ¿Por qué Ruby expone símbolos?
- 22. ¿Cómo se accede a la información de estilo de capa en Photoshop?
- 23. ¿Cómo se accede a la información de nivel de bytes en JavaScript?
- 24. concurrencia Mysql: ¿qué sucede si se accede a una tabla bloqueada?
- 25. ¿Cómo se accede a la variable declarada en una extensión de clase?
- 26. ¿Cómo se accede a Doctrine DBAL en una clase de servicio de Symfony2?
- 27. error WEBrick :: :: HTTPStatus LengthRequired cuando se accede a crear método en el controlador de
- 28. Accede a la función C++ desde QML
- 29. ¿Cómo se accede a las columnas con un espacio en ellas a través de mysql_fetch_object?
- 30. ¿Cómo se accede a los elementos anidados de un hash con una sola clave de cadena?
Si no importa que pregunte, ¿qué estás usando esto? – Geo
Lo estoy usando para esto: http://stackoverflow.com/questions/199603/how-do-you-stringize-serialize-ruby-code Básicamente, nadie respondió mi pregunta lo suficientemente bien, así que antes de ofrecer recompensa (que me haría perder representante), pensé en dividirlo en esta subpregunta y encontrar la respuesta yo mismo. –