Perché Ruby ha variabili globali come $$
?Per cosa sono utili le globali di Ruby?
Non è possibile ottenere un comportamento simile definendo accessor e attributi in Kernel
?
È questo per impedire l'override in sottoclassi?
Perché Ruby ha variabili globali come $$
?Per cosa sono utili le globali di Ruby?
Non è possibile ottenere un comportamento simile definendo accessor e attributi in Kernel
?
È questo per impedire l'override in sottoclassi?
Questa domanda ha più parti e quindi risposte.
Q1.
Perché Ruby ha variabili globali come $$?
Ruby prende a prestito da Perl e LISP. Entrambi hanno variabili globali.
Ruby ha ereditato la filosofia Perl di avere più di un modo di fare la stessa cosa. Yukihiro Matsumoto - 29 Settembre 2003
Q2.
Non è possibile ottenere un comportamento simile definendo gli accessor e gli attributi nel kernel?
Sì, e lo sono stati. Tuttavia, si può affermare che esistono valori programmati che hanno un'applicabilità globale e che pertanto dovrebbero avere portata globale senza introdurre alcun codice intermedio.
Mentre potrebbe essere più OO incapsulare questi all'interno di un metodo di classe, la domanda diventa quindi più importante per l'utente, semplicità o stile. Il nome del file di script passato alla macchina virtuale è invariato. Come sono gli argomenti della riga di comando. C'è poco beneficio ottenuto estraendo l'accesso a tali valori attraverso un metodo. Una variabile globale è sufficiente per lo scopo ed è il più leggero possibile.
Q3.
È questo per impedire l'override in sottoclassi?
La risposta a questo mi è sconosciuta.
Infine, veniamo a quello che è la domanda posta nel titolo:
Quali sono globali di Ruby utile per?
Si può tracciare assegnazioni delle variabili in Ruby attraverso il metodo trace_var
Kernel:
trace_var :$_, proc {|v| puts "$_ is now '#{v}'" }
$_ = "hello"
$_ = ' there'
Uscite STDOUT:
$_ is now 'hello'
$_ is now ' there'
si può concepire un programma che abbia qualche evento guidato modifica una variabile denominata $ state, ad esempio una GUI o un feed del sensore, in cui semplicemente tracciare le modifiche alle variabili globali elimina la necessità che il codice del programma implementa essenzialmente la stessa funzionalità.
Stai chiedendo in particolare le [cifre speciali] (http://jimneath.org/2010/01/04/cryptic-ruby-global-variables-and-their-meanings.html) come '$$' ecc o sulle variabili globali in generale? I globals speciali sono una delle influenze in Ruby che provengono da Perl e infatti esistono metodi alternativi per ottenere le stesse informazioni ('Process.id' nel caso di' $$ '), che sarebbe preferibile in questi giorni. – mikej
Globali in generale, sebbene l'esistenza di $$, $ 0 ecc sembrerebbe sancire il loro utilizzo. –
Sì, un comportamento simile potrebbe essere ottenuto definendo metodi (accessor) sul Kernel, ma "simile", per dichiarare l'ovvio, non è "uguale". Per prima cosa, le chiamate al metodo sono costose in Ruby, almeno rispetto all'accesso a una variabile globale. –