タグ

メソッドとScopeに関するtyosuke2011のブックマーク (2)

  • 第17章 動的評価

    概略 評価器の仕組みそれ自体については前章までで既に完結している。章ではそ の全てにパーサまでを加えた「広義の評価器」としての全体像を検証しよう。 対象となるのはeval・Module#module_eval・Object#instance_evalの三つであ る。 eval evalについては既に話したが、ここではより細かい話をしようと思う。 evalを使うと実行時にその場で文字列をコンパイルし、評価することができる。 返り値はそのプログラムの最後の式の値だ。 p eval("1 + 1") # 2 evalする文字列の中からはそのスコープの変数も参照できる。 lvar = 5 @ivar = 6 p eval("lvar + @ivar") # 11 ここまで読んできた読者なら「そのスコープ」という言葉を安直に読み飛ばせ なくなっているだろう。例えば定数の「スコープ」はどうなっている

  • 第16章 ブロック

    イテレータ この章ではRubyスタック七のうち最後の大物、BLOCKが登場する。 これが終われば評価器の内部状態についてはわかったも同然だ。 全体像 イテレータの仕組みはいったいどうなっているのか。 まず次のような小さいプログラムで考えてみよう。 ▼ソースプログラム iter_method() do 9 # ブロックを探す目印 end 用語を確認しておく。このプログラムで言うとiter_methodが イテレータメソッド、do〜endがイテレータブロックだ。 このプログラムの構文木をダンプしたらこうなった。 ▼対応する構文木 NODE_ITER nd_iter: NODE_FCALL nd_mid = 9617 (iter_method) nd_args = (null) nd_var = (null) nd_body: NODE_LIT nd_lit = 9:Fixnum イテレータブ

  • 1