AviSynth入門/引数の省略とデフォルト値
はじめに †
前回のAviSynth入門/書式と引数では、省略できる引数と省略できない引数があることを紹介しました。今回は、実際に引数を省略する方法と、その際に注意すべき点を解説します。
デフォルト値 †
引数を省略すると、あらかじめ設定されているデフォルト値(初期値)が適用されます。たとえば、KenKunNRフィルタの引数のデフォルト値は、strengthが256, radiusが2, そしてthresholdは6です。
省略の仕方 †
引数リストの後ろの引数から順に省略 †
引数リストの一番最後の引数から順に省略したいなら、単純にその部分の指定を行わないだけで結構です。
KenKunNR(256, 2)
上記の例では、一番最後の引数thresholdが省略されています。この場合、thresholdには、デフォルト値の6が適用されます。
KenKunNR(256)
radiusとthresholdの2つの引数が省略されています。radiusにはデフォルト値の2が、thresholdにはデフォルト値の6が適用されます。
引数リストの途中の引数を省略 †
たとえば、strengthを省略して、radius=1, threshold=24を指定したいとします。このとき、以下のように記述すると、期待したのとは異なる結果になるでしょう:
# 誤った例 KenKunNR(1, 24)
なぜなら、KenKunNRの(clipを除いた)最初の引数はstrength、2つ目の引数はradiusであるため、strength=1, radius=24と解釈されてしまうからです。
もし、引数リストの途中の引数を省略したいなら、名前付き引数を使って指定します。
# 正しい例 KenKunNR(radius=1, threshold=24)
この例では、radiusは1、thresholdは24、そしてstrengthはデフォルト値の256が適用されます。
すべての引数を省略 †
KenKunNR()
(clip以外の)すべての引数を省略しました。それぞれの引数のデフォルト値が適用されます。
KenKunNR
また、この場合にかぎり、カッコを省略することもできます。
名前なし引数と名前付き引数の併用 †
名前なし引数と名前付き引数を併用する場合には、注意が必要です。
# 誤った例 KenKunNR(strength=256, 2)
上記のように、名前付き引数で指定したあとに名前なし引数を使おうとすると、エラーが出ます。
エラー内容を見ると、名前付き引数の"strength"が1回よりも多くKenKunNRに渡された(the named argument "strength" was passed more than once to KenKunNR)とあります。どうやら、strength=256だけでなく、その次の2もstrengthであると解釈されたようです。
# 正しい例 KenKunNR(256, threshold=24)
このように、途中までは名前なし引数で、途中から名前付き引数という指定は可能です。
まとめ †
- 引数を省略するとデフォルト値(初期値)が適用される。
- 引数リストの後ろの引数から順に省略したい→単純にその引数を指定しない。
- 引数リストの途中の引数を省略したい→名前付き引数を使用する。
- すべての引数を省略したときは、カッコも省略できる。
- 名前なし引数と名前付き引数の併用
- 名前付き引数の後ろに名前なし引数を使用することはできない。