荻野です。もうひとつご指導ください。

他人とか一年後の自分とかが使うことを想定するクラスなどでメソッドの入り
口で引数のチェックとかはどうするのが良いのでしょうか?

ぱっと思いつくところで、

1) オブジェクトの型が想定しているものと違うかもしれない
2) インスタンス変数へ代入するときはコピーをつくるべきか
3) メソッドの実行中に別スレッド中でオブジェクトが変化するかも

などの問題があると思うのですが。


1) は、

  raise ArgumentError if arg.kind_of? ....

というのを引数の数だけならべてみるか、String が欲しければ .to_s をかけ
て見るとか、数が欲しければ .to_i とか .to_f とかをかけてみるとかでしょ
うけども、なんとなくスマートではないですよね。

2) は、一般論としてはインスタンス変数と外部の変数が同一のオブジェクト
を指しているとカプセル化が信用できなくなってしまうような気がするので、
積極的に .dup すべきだと思うのですが、たとえばファイル名とかだとかなり
普遍性があるような気がしてしまいます。

3) は使うほうが気をつけるべきという気もします。自分ではまだスレッドに
足を踏み入れていないので分からないのですが、他の人はスレッド内でメソッ
ドを呼ぶかもしれませんよね。

このあたりのガイドラインというか推奨とかを教えていただければと思って書
きました。よろしくお願いします。

-- 
荻野 充 (おぎの みつる) ... 「萩(はぎ)」にあらず
名古屋大学消費生活協同組合