2010-12-15 21 views
-3

lors de la vérification du code source ruby, l'accès de certaines variables globales peut être virtuel.Dans ruby, comment invoquer une procédure lors de la définition de variables globales?

Je veux dire define_global_variables_get("$a",some_get_procedure), define_global_variables_set("$a",some_set_procedure), des choses comme ça, si je me souviens bien, donc en fait il y a des variables globales accessibles de cette façon parmi ce vaste ensemble de variables globales rubis. Donc, ma question est, comment puis-je définir ma variable globale get/set comme ça dans le code de ruby?

+0

S'il vous plaît reformuler votre question car il est source de confusion. Il est vraiment difficile de dire ce que vous voulez savoir. –

+0

@ user195957, j'ai trouvé un moyen de faire ce que (je pense) que vous voulez. J'ai entièrement réécrit ma réponse. Ai-je compris ce que vous voulez faire? –

+0

Bonjour, c'est en quelque sorte une partie de mon histoire, ce que je veux dire c'est obtenir une procédure, (comme dans l'attribut d'un objet), class Base, attr_accessor: vow, end, puis Base. new.vow est en fait une méthode. – femto

Répondre

2

Vous voulez une variable globale qui, lorsqu'elle est consultée, évalue votre code pour obtenir la valeur de la variable? Vous pouvez le faire. Vous aurez besoin de la gemme promise.

#!/usr/bin/ruby1.8 

require 'promise' 

$a = promise do 
    puts "generating value of $a" 
    123 
end 

Ceci définit $ a pour le résultat du bloc, mais le bloc ne sera pas exécuté tant que $ a n'est pas réellement accédé. Faisons accéder pour la première fois:

puts $a 

# => generating value of $a 
# => 123 

Accès une seconde fois retourne la valeur mise en cache, de sorte que le bloc ne sera pas appelé à nouveau:

puts $a 

# => 123