タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

evalに関するtoshi3221のブックマーク (3)

  • Rubyでクラスをホットデプロイする手段を考える - うなの日記

    Rubyでクラスのホットデプロイをサポートするにはどういった方法がいいかな、と考えてみた。 案1:evalを使う そもそもRubyでは、ロード済みクラスを後から書き換える、といったことが可能なので単純な手段としては新しいクラスが書かれた文字列を読み込んでevalしてやればとりあえずクラスの更新はできる。 # クラスローダー(こんな適当な実装だと使い物にならんけど) class ClassLoader # 文字列からクラスをロードする def define_class( class_definition ) eval class_definition end # クラス名のクラスを得る def load_class( name ) eval name end end # クラス定義 kitten_definition =<<-CLASS class Kitten def meow; "meo

    Rubyでクラスをホットデプロイする手段を考える - うなの日記
    toshi3221
    toshi3221 2010/07/15
    eval使えば何でも出来るのか。文字列をスクリプトとして評価できちゃう
  • BasicObject#instance_eval (Ruby 3.3 リファレンスマニュアル)

    instance_eval(expr, filename = "(eval)", lineno = 1) -> object[permalink][rdoc][edit] instance_eval {|obj| ... } -> object オブジェクトのコンテキストで文字列 expr またはオブジェクト自身をブロックパラメータとするブロックを評価してその結果を返します。 オブジェクトのコンテキストで評価するとは評価中の self をそのオブジェクトにして実行するということです。また、文字列 expr やブロック中でメソッドを定義すればそのオブジェクトの特異メソッドが定義されます。 ただし、ローカル変数だけは、文字列 expr の評価では instance_eval の外側のスコープと、ブロックの評価ではそのブロックの外側のスコープと、共有します。 メソッド定義の中で instance

    toshi3221
    toshi3221 2010/07/14
    instance_evalメソッドは、渡されたブロックをレシーバのインスタンスの元で実行します。
  • Module#class_eval (Ruby 3.3 リファレンスマニュアル)

    module_eval(expr, fname = "(eval)", lineno = 1) -> object[permalink][rdoc][edit] module_eval {|mod| ... } -> object class_eval(expr, fname = "(eval)", lineno = 1) -> object class_eval {|mod| ... } -> object モジュールのコンテキストで文字列 expr またはモジュール自身をブロックパラメータとするブロックを評価してその結果を返します。 モジュールのコンテキストで評価するとは、実行中そのモジュールが self になるということです。つまり、そのモジュールの定義式の中にあるかのように実行されます。 ただし、ローカル変数は module_eval/class_eval の外側のスコープと共有し

    toshi3221
    toshi3221 2010/07/14
    この一行が欲しかった「class_evalメソッドは、ブロックをクラス定義やモジュール定義の中のコードであるように実行します。」
  • 1