From: Minero Aoki Date: 2000-02-25T18:00:22+09:00 Subject: [ruby-dev:9286] Re: ruby object あおきです。 In mail "[ruby-dev:9278] Re: ruby object" matz@netlab.co.jp (Yukihiro Matsumoto) wrote: > まつもと ゆきひろです > ちなみに Regexp.post_match と current.post_match だと正規表 > 現と関係するという情報がある分だけ良いかもと思ってますけど。 でも、Regexp.post_match は読んだときになんの post なのか 全然わからなくないですか?スレッド固有なイメージも全然ないし。 というわけでさらにちょっと改造した案ですが、Object#current_match で $~ が得られて、$' などはそれから得るというのはどうでしょうか? > |その逆 > | > | rescue ArgumentError(err) # やっぱり変 > > こりは構文解析できないですね。 添付のパッチで rescue ArgumentError err のような文法がとりあえず 通りました。例外指定が定数だけになってしまうのが弱点ですが、 普通はこれでも十分かなと思ってばっさり省略してみました。 > |> |文字列 > |> | $, $; > |「使わないでください」ってお願いしておいて、 > |将来は ruby にフラグをつけないと抹消されてしまうというのは > |どうでしょう ^^;; > ま、それはあるかも。その時は > > $/ $\ > > も一蓮托生ですね。 とりあえずドキュメントから削ってみませんか?(1.5で) そこまででなくても「使うことは推奨しない」とか > |モジュールにまとめるとしたらこっちのほうがその気になりますか? > |module Ruby とか。 > > うーん、Ruby::Version とかですか。それはそれで面白いかなあ。 ユーザレベルで定義した例… module Ruby module_eval def debug() $DEBUG end def debug=(f) $DEBUG = f end def verbose() $VERBOSE end def verbose(f) $VERBOSE = f end def load_path() $: end def provided() $" end def process_id() $$ end # Process にあってもいいかも alias pid process_id def argv() ARGV end def program_name() $0 end Version = ::RUBY_VERSION LeleaseDate = ::RUBY_RELEASE_DATE Platform = ::RUBY_PLATFORM end ------------------------------------------------------------------- あおきみねろう --- org.parse.y Sat Feb 19 15:19:35 2000 +++ parse.y Fri Feb 25 17:20:42 2000 @@ -180,6 +180,7 @@ %type f_arglist f_args f_optarg f_opt f_block_arg opt_f_block_arg %type array assoc_list assocs assoc undef_list backref %type block_var opt_block_var brace_block do_block lhs none +%type err_list opt_err_list %type mlhs mlhs_head mlhs_tail mlhs_basic mlhs_entry mlhs_item mlhs_node %type fitem variable sym symbol operation operation2 operation3 %type cname fname op f_rest_arg @@ -1441,7 +1442,7 @@ cases : opt_else | case_body -rescue : kRESCUE opt_list do +rescue : kRESCUE opt_err_list do compstmt rescue { @@ -1449,6 +1450,26 @@ fixpos($$, $2?$2:$4); } | none + +opt_err_list : err_list + | none + +err_list : arg + { + value_expr($1); + $$ = NEW_LIST($1); + } + | tCONSTANT tIDENTIFIER + { + } + | err_list ',' arg + { + value_expr($3); + $$ = list_append($1, $3); + } + | err_list ',' tCONSTANT tIDENTIFIER + { + } ensure : none | kENSURE compstmt