[Gauche-devel-jp] handing keyword in ref

Back to archive index

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




Gauche-devel-jp メーリングリストの案内
Back to archive index