AutoHotkeyはプロトタイプのOOP言語(JavaScriptなど)であるため、組み込み関数であってもオーバーライドできます。以下はLexikosによると、配列をそのような[]として定義することを無効にする、文書化されていない事実であるArray()のデモです。
フォーラムにはネイティブで実装されたゼロベースを求めるいくつかのスレッドがありますが、解決策を提示していないスレッドがいくつかあります。 Array()のオーバーライドが示されたスレッドでさえ、これが可能であることは言及されていませんでした。
ボーナスとして、この機能の無限の可能性をさらに実証するためにsplit()(ゼロベースのStrSplit()関数)を追加しました。
私は単体テストやメソッドオーバーライドを実装していないので、私は何か見落としてしまった可能性がありますが、それが概念証明としては十分だと感じました。さらに、これは大規模な配列のパフォーマンスに影響を与えることは疑いがありません。特に、このデモでLength()を実装した理由があります。
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
}
}
本当に素敵です!私はA_Indexの動作を変更する魔法の方法があるのだろうかと思っています。 – Forivin
AutoHotkeyソースコードを使いこなすのは簡単ではないと思います。また、このチェックアウトが好きなら、https://gist.github.com/errorseven/660178adcc754fd9a7c1b1ff22852167#file-pythahk-ahk – errorseven