[#44431] コンストラクタの引数について&インスタンス変数の持ち方について — Akira Hayakawa <ruby@...>
度々オブジェクト指向についての質問ですいません。
17 messages
2008/01/04
[#44433] Re: コンストラクタの引数について&インスタンス変数の持ち方について
— Yukihiro Matsumoto <matz@...>
2008/01/04
まつもと ゆきひろです
[#44453] RSS取得時<enclosure>タグでエラー? — "garyo hosu" <garyohosu@...>
garyoです。いつもお世話になっております。
5 messages
2008/01/08
[#44463] [ANN] Rails勉強会@東京 第26回のお知らせ — "MOROHASHI Kyosuke" <moronatural@...>
各位
1 message
2008/01/11
[#44464] [ANN] rcairo 1.5.1 — Kouhei Sutou <kou@...>
須藤です。
5 messages
2008/01/11
[#44469] pdf 作成 ライブラリ — "Luiz Aoki" <luizruby@...>
はじめまして、青木ルイスと申します、
14 messages
2008/01/12
[#44479] ファイル出力時のprintについて
— m-hatake@...
2008/01/16
畠山と申します。
[#44481] Re: ファイル出力時のprintについて
— KIMURA Koichi <kimura.koichi@...>
2008/01/16
木村です。
[#44483] format %g の丸めについて — 山崎雄介 <y-yamasaki@...>
山崎(ゆ)です。
14 messages
2008/01/16
[#44517] www.ruby-lang.org/ja/man/ を静的HTMLに変更 — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
6 messages
2008/01/20
[#44536] カタカナ→ひらがな変換 — "Hideo Konami" <konami@...>
小波です。
8 messages
2008/01/25
[ruby-list:44504] Re: モジュールのメソッドを呼び出し時の引数について
From:
KIMURA Koichi <kimura.koichi@...>
Date:
2008-01-17 03:24:11 UTC
List:
ruby-list #44504
木村です。 On Thu, 17 Jan 2008 09:59:08 +0900 KURODA Hiraku <hiraku@sapporo.email.ne.jp> wrote: > ・・・と思ったのですが、関数形式か否かの場合分けだと、[ruby-list:44482] > で書いた ブロックの中の関数呼び出しでsyntax error の説明がつきません(汗 > しかも、メソッドの中だと同じ書き方でもerrorにはならないし。 > > # もしかして、原因が2種類あるとか? 情報をまとめている時間がないので概略だけ説明します。 --yydebug というオプションをつけて実行すると、どのように構文解析されたか の情報を出力してくれます。 ruby --ydebug -e 'puts "hello"' Starting parse Entering state 0 Reducing stack by rule 1 (line 346): -> $$ = nterm @1 () Stack now 0 Entering state 2 Reading a token: Next token is token tIDENTIFIER () Shifting token tIDENTIFIER () Entering state 34 Reading a token: Next token is token tSTRING_BEG () Reducing stack by rule 477 (line 2438): $1 = token tIDENTIFIER () -> $$ = nterm operation () Stack now 0 2 Entering state 94 Next token is token tSTRING_BEG () Reducing stack by rule 253 (line 1392): -> $$ = nterm @8 () Stack now 0 2 94 Entering state 246 こんな感じに。 簡単なところで ruby --yydebug -e 'Kernel.print (rand*100).truncate, "\n"' と ruby --yydebug -e 'print (rand*100).truncate, "\n"' の解析結果を比較すると、 OK Starting parse Entering state 0 Reducing stack by rule 1 (line 346): -> $$ = nterm @1 () Stack now 0 Entering state 2 Reading a token: Next token is token tIDENTIFIER () Shifting token tIDENTIFIER () Entering state 34 Reading a token: Next token is token tLPAREN_ARG () Reducing stack by rule 477 (line 2438): $1 = token tIDENTIFIER () -> $$ = nterm operation () Stack now 0 2 Entering state 94 Next token is token tLPAREN_ARG () Reducing stack by rule 253 (line 1392): NG Starting parse Entering state 0 Reducing stack by rule 1 (line 346): -> $$ = nterm @1 () Stack now 0 Entering state 2 Reading a token: Next token is token tCONSTANT () Shifting token tCONSTANT () Entering state 38 Reading a token: Next token is token '.' () Reducing stack by rule 422 (line 2190): $1 = token tCONSTANT () -> $$ = nterm variable () Stack now 0 2 Entering state 90 Next token is token '.' () Reducing stack by rule 430 (line 2200): $1 = nterm variable () -> $$ = nterm var_ref () Stack now 0 2 Entering state 91 Reducing stack by rule 274 (line 1460): $1 = nterm var_ref () -> $$ = nterm primary () Stack now 0 2 Entering state 75 Next token is token '.' () Reducing stack by rule 326 (line 1728): $1 = nterm primary () -> $$ = nterm primary_value () のようにだいぶ違った様相です。 Kernel.print というのは上記の解析では、 'Kernel.print' でひとかたまりの識別子ではなく、 'Kernel' という constant と、 'print' という identifier を '.' という operator でくっつけた「式」です。 一方 print は単なる identiferですので、その後ろに同じもの (rand*100).truncate, "\n" が続いていても違う解析結果になっているという わけです。 ブロックの中と外ではこれとは違いますが、中と外とで解析結果が異なるという 点は同じです。 -- 木村浩一