[#46502] Twitterのサンプルでエラーなんですが。 — "T.Soejima" <clev@...2.so-net.ne.jp>
そえじま@勉強中です。
9 messages
2009/11/02
[#46517] Ruby1.8.8devでのsinatra動作について — "前川 映一" <eiichi_maekawa@...>
7 messages
2009/11/05
[#46530] ARGVの引数のデータタイプ — askar <askar75@...>
アスカルです。
9 messages
2009/11/09
[#46532] Re: ARGVの引数のデータタイプ
— Yukihiro Matsumoto <matz@...>
2009/11/09
まつもと ゆきひろです
[#46535] Re: ARGVの引数のデータタイプ
— askar <askar75@...>
2009/11/11
まつもとさん、
[#46546] CSV.openがうまく動きません — ichirojiro <ichirojiro@...>
ichiroと申します。
8 messages
2009/11/14
[#46558] 【追記】 Ruby on Railsセミナーのエントリーについて — 川井健史(CO) <takeshi.kawai@...>
Rubyistの皆様
4 messages
2009/11/15
[#46571] ruby1.9 でpostgresql8.4を利用するときについて。 — Nobuyuki Inaba <nobuyuki.inaba@...>
稲葉と申します。
8 messages
2009/11/27
[#46575] Re: ruby1.9 でpostgresql8.4を利用するときについて。
— keiichi matsunaga <ma2@...>
2009/11/30
On 11/27/2009 7:12 PM, Nobuyuki Inaba wrote:
[#46572] [ANN]12/12 DevLOVE2009Fusion を開催します — <papanda0806@...>
ruby-listのみなさん
1 message
2009/11/27
[ruby-list:46526] Re: obj.? メソッド
From:
Yusuke ENDOH <mame@...>
Date:
2009-11-05 16:56:07 UTC
List:
ruby-list #46526
遠藤です。
2009年11月4日17:00 KISHIMOTO, Makoto <ksmakoto@dd.iij4u.or.jp>:
> レシーバを省略しない呼び出しであれば、現在、obj.def とか obj.end とか obj.and
> とか、演算子やそのほかの構文と被ってる名前でも使えるわけですよね?
> そういうわけで、obj.? もあっていいんではないか、と改めて提案します。
とくに賛成でも反対でもないのですが
> 誰がうれしいか、ということについてですが、パーサコンビネータで、
> a a? b という構文規則をたとえば a >> a.opt >> b としていたものを、
> a >> a.? >> b と、簡潔かつ直感的にわかりやすく書けるようになります。
DSL で欲しい場合がありそうという需要はなんとなく理解はできました。
もし採用するとしても、こういう文法拡張は 2.0 になるかなと思いつつも、
パッチを書いてみました。既存の文法と衝突するところってありますかね。
$ ./ruby -e '
class C
def ?
:foo
end
end
p C.new.? #=> :foo
'
:foo
diff --git a/parse.y b/parse.y
index c10dfe6..5490367 100644
--- a/parse.y
+++ b/parse.y
@@ -1793,6 +1793,7 @@ op : '|' { ifndef_ripper($$ = '|'); }
| '%' { ifndef_ripper($$ = '%'); }
| tPOW { ifndef_ripper($$ = tPOW); }
| '!' { ifndef_ripper($$ = '!'); }
+ | '?' { ifndef_ripper($$ = '?'); }
| '~' { ifndef_ripper($$ = '~'); }
| tUPLUS { ifndef_ripper($$ = tUPLUS); }
| tUMINUS { ifndef_ripper($$ = tUMINUS); }
@@ -6675,6 +6676,10 @@ parser_yylex(struct parser_params *parser)
return tSTRING_BEG;
case '?':
+ if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
+ lex_state = EXPR_ARG;
+ return '?';
+ }
if (lex_state == EXPR_END || lex_state == EXPR_ENDARG) {
lex_state = EXPR_VALUE;
return '?';
--
Yusuke ENDOH <mame@tsg.ne.jp>