未定義のメソッドが呼び出されたときに備える
文字列と同名の関数を呼出す - 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 にしておくのがいいかもしれない。