タグ

evalに関するseapig_dolphinのブックマーク (2)

  • Rubyメタプログラミング読んで思いついたたわごと - 146,000

    きっかけ 『メタプログラミングRuby』を読み直す。再読して気づいたけど、書いてあることの大半は、Rubyのオブジェクトモデルの解説だ。言い換えると、Rubyにおいてクラスやメソッド、インスタンス変数がどんなふうに作られて、実際にはどこに置かれているのか、メソッドが呼び出された時裏でどのような処理が動いているのか、などについてだ。もちろんというか、RubyのVMがどう動いてるかとかそういうレベルの話じゃなくて、Rubyのソースコードがどのようなモデルに基づいて解釈されるかってことだ、。 それをまとめると、次のようになるようだ。 Rubyのクラス定義やメソッド定義は、宣言じゃない。コンパイル時じゃなくて実行時に『実行されて』クラスやメソッドを定義する。 Rubyの構文には、それと等価なメソッド呼び出しが存在する defによる関数定義と等価なdefine_methodメソッド classによる

    Rubyメタプログラミング読んで思いついたたわごと - 146,000
  • Rubyのリフレクション解説(eval族のはなし) - このブログは証明できない。

    Rubyのリフレクションについてステキな記事を見つけてしまいました。 no title 前提知識 Rubyでは何でもオブジェクトだと言われます。まずは、この辺について。 最初に思い浮かぶのはこれですね。 5.class #=> Fixnum "hello".class #=> String class自体はどうでしょうか? class Foo;end #=> nil Foo.class #=> Class ここから2つのことが解ります。Fooは定数であるということ。そしてClass型のオブジェクトを参照しているということ。 これはどうでしょう? Foo = Class.new (irb):8 warning: already initialized constant Foo => Foo 予想通りエラーになります。定数 Foo を再度初期化しようとしたからです。 Fooクラスを定義したい時

  • 1