Da AutoHotkey eine prototypische OOP-Sprache ist (wie JavaScript), können Sie jede Funktion außer Kraft setzen, auch wenn sie in solchen integriert ist. Unten ist eine Demonstration von überschreibendem Array() gezeigt, das gemäß Lexikos eine nicht dokumentierte Tatsache ist, dass es das Definieren eines Arrays als solches überschreibt [].
Ich glaube nicht, dass es möglich ist, da es mehrere Threads in den Foren gibt, die nach NULL-basierten nativen Implementierungen fragen, aber keine bieten eine Lösung. Selbst der Thread, in dem eine Überschreibung von Array() demonstriert wurde, erwähnte nicht, dass dies möglich wäre!
Als Bonus habe ich split() (nullbasierte StrSplit() - Funktion) hinzugefügt, um die endlosen Möglichkeiten dieser Funktion weiter zu demonstrieren.
Nur um zu beachten, ich habe keine Einheit getestet oder implementiert jemals Methode Override, es ist möglich, dass ich etwas übersehen habe, aber ich fühlte, es war genug für einen Proof of Concept. Außerdem habe ich keine Zweifel, dass dies die Leistung bei großen Arrays beeinträchtigen wird, insbesondere weil ich Length() für diese Demo implementiert habe.
x := [] ; declare empty array
x.push("Zero Based rocks!") ; push message to the array.
msgbox % x[0]
x := "" ; clear our Object
x := split("AutoHotkey with Zero Based Arrays")
msgbox % x.2 " " x.3 " " x.4 " " x.1 " " x.0
Array(prm*) {
x := {}
loop % prm.length()
x[A_Index -1] := prm[A_Index]
x.base := _Array
return x
}
split(x, dlm:="", opt:="") {
r := []
for k,v in StrSplit(x, dlm, opt)
r.push(v)
return r
}
Class _Array {
; Modified .length() to account for 0 index
length() {
c:=0
for k in this
c++
return c
}
; Modified .push() to start at 0
push(x) {
if (this.0 == "" && this.length() == 0)
return this.0 := x
else
return this[this.MaxIndex()+1] := x
}
}
Wirklich nett! Ich frage mich, ob es eine magische Möglichkeit gibt, auch das Verhalten von A_Index zu ändern. – Forivin
Kurz von Unordnung mit AutoHotkey-Quellcode, glaube ich nicht, gibt es. Auch, wenn Sie dies möchten, gehen Sie folgendermaßen vor: https://gist.github.com/erroroseven/660178adcc754fd9a7c1b1ff22852167#file-pythahk-ahk – errorseven