Shammer's Philosophy

My private adversaria

未定義のメソッドが呼び出されたときに備える

文字列と同名の関数を呼出す - Shammerismで動的メソッド呼出し(?)について書いたけれども、
すぐに「未定義のメソッドを呼び出そうとしてしまった場合にどうなるか」が疑問になった。処理系ごとに
異なってくるかもしれないが、とりあえず sbcl ではこうすることでエラーハンドリングできた。

(defun myfuncall (method-name)
  (funcall (intern (string-upcase method-name))))

(handler-case
    (myfuncall "test")
  (error (e)
    (format t "~A was thrown.~%" (type-of e))))

エラーハンドリングを忘れないようにしなければ。sbcl では UNDEFINED-FUNCTION が throw されたけれども、
clisp では SIMPLE-UNDEFINED-FUNCTION が throw された。処理系で投げられるエラーというか、condition は異なるようなので
捕捉対象の condition は汎用的な error にしておくのがいいかもしれない。