Rubyで複数行コメント

残念ながらRubyには複数行コメントがありません。いや、RDコメントはあるけど、RDとして抽出することを期待してないときもあるし、っていうか期待してないことのほうが多いし。行の途中でも使いたいし。

と言うことで試しにやってみました。#{...} が複数行コメントです。ただしこのコメント内では "}" は使えません。ただの手抜きです。すいません。

*** parse.y.1.9.3-p0    2011-12-06 23:25:14.000000000 +0900
--- parse.y     2011-12-06 23:22:38.000000000 +0900
***************
*** 6695,6700 ****
--- 6695,6711 ----
                set_file_encoding(parser, lex_p, lex_pend);
            }   
        }   
+       c = nextc();
+       if (c == '{') {
+           for (;;) {
+               c = nextc();
+               if (c == -1) return -1;
+               if (c == '}') {
+                   goto retry;
+               }
+           }
+       }
+       pushback(c);
        lex_p = lex_pend;
  #ifdef RIPPER
          ripper_dispatch_scan_event(parser, tCOMMENT);

なんでこんなことやったかというと先日のOptionally Typed風コメントを実際にやってみたかったから。以下なんとなく型付けてるふり。

def foo(bar#{to_s})#{String}
  ret#{String} = "Hello, #{bar.to_s}"
  ret 
end
puts foo("multiline comment")
$ ./ruby multiline_comment.rb
Hello, multiline comment
$

ん、なんかそれっぽい気がする。

コメント内で "}" が使えないのはあんまりだけど、それはそれとしてやっぱRubyにも複数行コメント欲しいなぁ。

クリスマス用にって思ったんだけど、やってみると簡単すぎたので放出。昨日のエントリの「無視される要素の追加」の2つ目、parser_yylexの方すね。