「初めてのRuby」を読むの続き
今日は
9章 本書を越えて
9.6 Rubyの黒魔術
から
■9.6 Rubyの黒魔術
・Rubyには、俗に「黒魔術」と呼ばれる危険な領域が存在する
→良く理解して使わないと、可読性を下げたり、セキュリティホールになる
→それだけの代償を払っても魅力的な機能
■9.6.1 eval族
・eval族:組み込み関数eval
Object#instace_eval
Module#module_eval
Class#class_eval
・文字列評価
eval族を使えば、実行時に文字列をRubyコードとして解析・実行できる
→外部からコードを入力して実行することすらできる
・コンテキストのすり替え
eval族を用いれば、コードの評価コンテキストをするかえることもできる
→本来ならインスタンスの中でしかアクセスできないはずのインスタンス
変数も、外部からアクセスできる
・言語内DSL
コンテキストのすり替えは、言語内DSLを構築するには欠かせない存在
■9.6.2 method_missing
・呼び出されたレシーバーが存在しないとき
→Object#method_missingが呼ばれる
→NoMethodError例外が発生する
・method_missingをオーバーライドすると、実際には、存在しないメソッドを
存在するかの容易振舞わせることができる
■9.6.3 set_trace_func
・set_trace_func
→ruby処理系にフックを仕掛けられる
・メソッドが呼ばれたり、戻ったり、クラスが定義されたり、インスタンス化
→そのたびいコールバックルーチンが呼ばれる
■9.6.4 継続
・継続とは、プログラム実行中のある時点において、以降で使われるであろう
計算、処理のこと
・Continuationオブジェクトとして操作できる
今日は
9章 本書を越えて
9.6 Rubyの黒魔術
から
■9.6 Rubyの黒魔術
・Rubyには、俗に「黒魔術」と呼ばれる危険な領域が存在する
→良く理解して使わないと、可読性を下げたり、セキュリティホールになる
→それだけの代償を払っても魅力的な機能
■9.6.1 eval族
・eval族:組み込み関数eval
Object#instace_eval
Module#module_eval
Class#class_eval
・文字列評価
eval族を使えば、実行時に文字列をRubyコードとして解析・実行できる
→外部からコードを入力して実行することすらできる
・コンテキストのすり替え
eval族を用いれば、コードの評価コンテキストをするかえることもできる
→本来ならインスタンスの中でしかアクセスできないはずのインスタンス
変数も、外部からアクセスできる
・言語内DSL
コンテキストのすり替えは、言語内DSLを構築するには欠かせない存在
■9.6.2 method_missing
・呼び出されたレシーバーが存在しないとき
→Object#method_missingが呼ばれる
→NoMethodError例外が発生する
・method_missingをオーバーライドすると、実際には、存在しないメソッドを
存在するかの容易振舞わせることができる
■9.6.3 set_trace_func
・set_trace_func
→ruby処理系にフックを仕掛けられる
・メソッドが呼ばれたり、戻ったり、クラスが定義されたり、インスタンス化
→そのたびいコールバックルーチンが呼ばれる
■9.6.4 継続
・継続とは、プログラム実行中のある時点において、以降で使われるであろう
計算、処理のこと
・Continuationオブジェクトとして操作できる