タグ

メソッドとあとで読むに関するtyosuke2011のブックマーク (3)

  • 【ruby】 メソッド探索から見る、モジュール・特異メソッド・特異クラス - 圧倒亭グランパのブログ

    rubyを書き始めて間もない頃、 「なんで NoMethodError なんだ...。あ、メソッド定義にself 付けたら通った。」 みたいなことがありました。 rubyを読んでいると、そのあたりがハッキリとイメージできるようになったのでまとめておきます。 参考にした 年明けからひたすらRubyを読んでいます。読了したのは以下。 現在は Effective Ruby を読んでいます。 これらを読んでいくと、中途半端に理解していた部分がカチッとハマるのでオススメです。 ※ 今回のコードは ruby 2.2.0 で試したものです。 オブジェクトとクラスの関係 サンプルコードを見てみましょう。 class C def c_instance_method @my_var = 1 end end obj = C.new 当初、自分はオブジェクトとクラスの関係を以下のように考えていました。 (

    【ruby】 メソッド探索から見る、モジュール・特異メソッド・特異クラス - 圧倒亭グランパのブログ
  • 第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