Shiro Kawai
shiro****@lava*****
2010年 8月 26日 (木) 08:08:06 JST
From: Masatake YAMATO <yamat****@redha*****> Subject: Re: [Gauche-devel-jp] handing keyword in ref Date: Wed, 25 Aug 2010 23:13:27 +0900 (JST) > open-output-fileのキーワード引数に:if-existsがあります。infoによればここに > 値として > :supersede > :append > :overwrite > :error > > が指定できることになっています。そこで質問なのですがこれがシンボルでは > なくキーワードとしたのはどういった経緯からでしょうか? Common Lispに合わせてあります。 http://www.lispworks.com/documentation/HyperSpec/Body/f_open.htm CLの場合、シンボルを取ることにするとパッケージを気にするのが面倒なので こういう「いくつかのオプションから選ぶ」場合にはキーワードを使いますね (正確には、CLではキーワードは「keywordパッケージに属するシンボル」ですが)。 Schemeではオフィシャルにはキーワードが無いので、SRFIや他のScheme実装に 合わせたAPIでは「いくつかのオプションから選ぶ」のにシンボルを使う場合があります。 (例: string-join)。 Gaucheは既存のAPIがある場合はなるべくそれに合わせようという方針なので、 由来によって不統一になってる部分はあります。 (ただ、あまりにGaucheの慣習から離れる場合はGauche側に沿うように変えますし、 可能ならオリジナルのAPIと統一的なAPIの両方を用意するということもします) キーワード引数については、既存のAPIに合わせたものはほぼCL由来でシンボルよりは キーワードを値に取るようになってると思うので、新規のAPIでもそれに合わせる のがいいんじゃないかと思っています。 オプショナル引数についてはScheme由来でシンボルを取るものが多いのと、 複数のオプショナル引数があってその最初のものにキーワードを渡すと キーワード引数呼び出しみたいに見えてしまうという可能性もあるので、 逆にシンボルを取る方を優先したいですね。 --shiro