Se faccio una partita con un espressione regolare con dieci cattura:Perché solo un numero limitato di acquisizioni di espressioni regolari è memorizzato in `global_variables`?
/(o)(t)(th)(f)(fi)(s)(se)(e)(n)(t)/.match("otthffisseent")
poi, per $10
, ottengo:
$10 # => "t"
ma non è presente global_variables
. Ottengo (in una sessione IRB):
[:$;, :$-F, :[email protected], :$!, :$SAFE, :$~, :$&, :$`, :$', :$+, :$=, :$KCODE, :$-K, :$,,
:$/, :$-0, :$\, :$_, :$stdin, :$stdout, :$stderr, :$>, :$<, :$., :$FILENAME,
:$-i, :$*, :$?, :$$, :$:, :$-I, :$LOAD_PATH, :$", :$LOADED_FEATURES,
:$VERBOSE, :$-v, :$-w, :$-W, :$DEBUG, :$-d, :$0, :$PROGRAM_NAME, :$-p, :$-l,
:$-a, :$binding, :$1, :$2, :$3, :$4, :$5, :$6, :$7, :$8, :$9]
Qui, solo i primi nove sono elencati:
$1, :$2, :$3, :$4, :$5, :$6, :$7, :$8, :$9
Ciò è confermato anche da:
global_variables.include?(:$10) # => false
Dove è $10
memorizzato, e perché non è memorizzato in global_variables
?
Puoi usare '$ ~' che contiene un oggetto MatchData, attraverso il quale puoi accedere a tutte le partite che iniziano con l'indice 1. –
@TamerShlash puoi anche usare '$ 10', ma ciò non spiega dove si trova quella variabile globale memorizzato e perché manca da 'global_variables' – Stefan
Esatto, ho letto male la domanda. –