Ich bin ziemlich neu in R, komme aber von Scheme - das auch lexikalisch begrenzt ist und Verschlüsse hat -, dass ich in der Lage wäre, äußere Variablen in einem Abschluss zu mutieren.Eine Variable in einem Abschluss mutieren
ZB in
foo <- function() {
s <- 100
add <- function() {
s <- s + 1
}
add()
s
}
cat(foo(), "\n") # prints 100 and not 101
Ich würde foo()
erwarten 101 zurück, aber es gibt tatsächlich 100:
$ Rscript foo.R
100
Ich weiß, dass Python das global
Schlüsselwort hat Umfang von Variablen zu deklarieren (doesn arbeite aber nicht mit diesem Beispiel. Braucht R etwas Ähnliches?
Was mache ich falsch?
aktualisieren
Ah, ist das Problem, dass ich in add
einen neuen, lokalen Variable s
, die das äußerte s
Schatten erschaffe? Wenn ja, wie kann ich s
mutieren, ohne eine lokale Variable zu erstellen?
Moderatoren können als Duplikate schließen, oder Sie können mitmachen und für die Schließung einer Mitgliedschaft stimmen. –
@BondedDust Gotcha, ich habe dafür gestimmt, dass auch geschlossen wird. Hatte nur Probleme damit zu googeln --- Ich habe die Lösung erst gefunden, als ich hier gepostet habe. So können andere Mods entscheiden, was damit zu tun ist. – csl
Zwei weitere Stimmen und es wird geschlossen, unabhängig von der Aufmerksamkeit des Moderators. Möglicherweise stellen Sie fest, dass die Funktion Reference Classes ein Paradigma ist, das zu Ihrem Programmierstil passt und bei normalen R-Anwendungen nicht als gefährlich angesehen wird. Es verwendet benannte Umgebungen und lässt Sie einige der Eigenschaften von "globalen" Variablen haben. –