Shammer's Philosophy

My private adversaria

&KEY をちょっとだけ使用してみようと思う

以前、&key の考察 - Shammerismで keyword 引数についての記事を少しだけ書いた。でも、実際に使用したかというと・・・全然使用していない。とりあえず、最初の引数だけは必須で、それ以外は Keyword 引数になるという関数を定義。

? (defun main (command &key (config-file "config.xml"))
(format t "Command is ~A~%" command)
(format t "config-file is ~A~%" config-file))
MAIN
? (main "start" :config-file "config.dat")
Command is start
config-file is config.dat
NIL
? (main "start")
Command is start
config-file is config.xml
NIL
?

引数を渡しても渡されなくてもいい、あってもなくてもいい、という場合は使用しにくいのではないか、と以前は思ったようだが(もう忘れているが)、使用しない場合はデフォルト値を定義しておけばいいのであまりここは気にしなくてもよいのかもしれない。

一つ気になるのは、コマンドライン引数として渡された引数も Keyword 引数のように扱うことができるのだろうか、ということ。これのよさは順序を意識しなくてもいいこと。引数が多くなればなるほど便利に使用できるようになると思うのだが。