まつもと ゆきひろです

In message "[ruby-ext:01053] Re: request for SWIG/Ruby (pragma)"
    on 00/04/25, Masaki Fukushima <fukusima / goto.info.waseda.ac.jp> writes:


|>     Rubyでは0がfalseでないので、そのまま変換したのでは期待通
|>     りに動作しないので、このint型の関数は実はbooleanとしての
|>     戻り値であることを示すpragmaが欲しいです。実際には
|> 
|>        %{
|>        typedef int rb_Bool;
|>        %}
|> 
|>        typedef int rb_Bool;
|> 
|>        %typemap(ruby,in) rb_Bool * {
|>            $target = RTEST($source);
|>        }
|>        %typemap(ruby,out) rb_Bool {
|>            $target = ($source)?Qtrue:Qfalse;
|>        }
|
|現状でも、boolという型名をtypedefして使うと、これとほぼ同じ扱いを
|するようになっています。

そうでしたか。気が付かなかったです。

|>     のような方法で対応できないでもないですが、やはりまとめた
|>     いのが人情です。
|
|「まとめる」というのは、具体的にどういうイメージなのでしょうか?

いや、boolを返すとpragma(なりなんなり)で指定したらRuby側のメ
ソッド名に ? を付けるというイメージです。ですから、

|あるいは、boolを返り値とするメソッドには全て ? を付けてしまうか。
|
|%{
|typedef int bool;
|%}
|bool foo(void); // => foo?

に近いですね。ただ、boolという型を要求するってのはヘッダファ
イルそのものとはプロトタイプが違って来てしまうので、pragmaの
方が良いのではと考えていたのです。

  %pragma(ruby) pred = "foo"

で、戻り値をboolにし、メソッド名に ? を付加するとか。

                                まつもと ゆきひろ /:|)