可変個の引数:params

Map のヘッダーに続いて、次のような記述があります。


public static List Map(params object[] param) {
if (param == null || param.Length < 2) {
throw Ops.TypeError(...);
}

params と宣言してあるのは、0 個以上の引数 param に対処したいからです。すると、if に続く条件式を見て、次のようなテストケースを思い付きます。


>>> map(None)

Traceback (most recent call last):
File "", line 1, in
map(None)
TypeError: map() requires at least two args

指定された引数 None は、null と対応します。すると、1番目の条件式 param == null が成立するので、例外を生成します。ところが、表示されたエラーメッセージは、メソッド本体にある、Ops.TypeError の引数とは似て非なる文字列です。このように微妙な違いがあるので、Python/IronPython の一貫性を保つには、細心の注意が必要です。Python でその動作を確認したのは、そのためでした。


>>> map() # 引数なし

Traceback (most recent call last):
File "", line 1, in
map()
TypeError: map() requires at least two args
>>> map(ord) # 引数が1つ

Traceback (most recent call last):
File "", line 1, in
map(ord)
TypeError: map() requires at least two args

ここでは、2番目の条件式 param.Length < 2 が成立するので、例外を生成して、エラーメッセージを出力します。IronPython との違いはあっても、同じ文字列なので、どちらも同じコードの断片を実行しているのが分かります。


Previous|2/5|Next