組み込みコマンド(関数ではない)でパラメーターを省略すると、実際には空の文字列が渡されます。これら 2 つのケースには次のような違いがあります。
- オプションのパラメーターとそれに続く必須パラメーターを使用して関数を定義する。
- 省略されたオプション パラメータを指定してコマンドを呼び出し、その後に省略されていないオプション パラメータが続く。
MsgBox と MouseGetPos の両方で、すべてのパラメーターはオプションです。
AutoHotkey 1.1 では、ユーザー定義関数で次のことが可能です。
Foobar(1,, 3)
Foobar(baz, blah="something", blivet="")
{
MsgBox baz=%baz%, blah=%blah%, blivet=%blivet%
}
これは、パラメータのデフォルト値がわかっている場合にのみ可能です (つまり、関数を動的に呼び出す場合ではありません)。
中間パラメータの省略を許可する
パラメータの順序を変更したくない場合、または 3 つのうち 2 つをオプションにしたくない場合は、ちょっとした「ジャグリング」を行うことができます。
Foobar("baz", "blivet")
Foobar("baz", "blah", "blivet")
Foobar(baz, p2, p3="omitted")
{
blah := p3="omitted" ? "default" : p2 ; optional
blivet := p3="omitted" ? p2 : p3 ; required
MsgBox baz=%baz%, blah=%blah%, blivet=%blivet%
}
このように、関数は常に少なくとも 2 つのパラメーターを必要とし、関数を呼び出すときに途中のパラメーターを実質的に省略できます。ただし、パラメータが省略されたことを示すために、(文字列または数値) 値を予約する必要があります。これは、可変引数関数を使用して AutoHotkey 1.1 で回避できます。
Foobar("baz", "blivet")
Foobar("baz", "blah", "blivet")
Foobar(baz, p2, p3*)
{
blah := p3.MaxIndex() ? p2 : "default" ; optional
blivet := p3.MaxIndex() ? p3[1] : p2 ; required
MsgBox baz=%baz%, blah=%blah%, blivet=%blivet%
}
別の方法として、関数を次のように宣言しFoobar(baz, p*)
、(追加パラメーターの数) に基づいて条件を指定することもできますp.MaxIndex()
が、その場合、最初のパラメーターのみが必須です。