From: "K.Kosako" Date: 2001-07-05T19:00:34+09:00 Subject: [ruby-list:30478] Re: syntax check without execution? Yukihiro Matsumotoさんの <994307909.325531.18276.nullmailer@ev.netlab.jp>から > むむむ、元々のニーズがSyntax Errorがあるか知りたいのであるの > にも関らず、「文字列->手続きオブジェクト」の変換手段を導入す > ることが答えになっているかどうかは疑問です。 手続きオブジェクトを生成すると、 環境のコピーが発生するので、余計だったかも。 Proc.compile("BEGIN{...}; END{...}") で作成した手続きを複数回callした場合に、 BEGIN{},END{}をどのような挙動にするのかということも、 考えていませんでした。 > それはそれとして String#compile は名前が不適切なのでいずれに > しても避けたいです。 手続きオブジェクトを返さないとすると、こんなものでしょうか。 1. String#parse([file [,line]]) 構文解析に成功するとtrueを返す。 失敗すると例外が発生する。 BEGIN{}があっても実行しない。END{}は登録されない。 田中さんのvalid?()があるので、もう必要ない気もします。 しかしvalid?()ではeval()を使用しているために、 code文字列が汚染されていて、スレッドが$SAFE > 0 だと セキュリティエラーが起こるので、少しだけ存在価値があるかな? -- 小迫@ソフネック 渋谷区恵比寿1-15-1