概要
フラットスコープ
内容
クロージャーを使って2つのスコープで変数を共有する。
Class.new
define_method :method_name do
Proc
instance_eval
などを使うことでスコープ外の変数を参照可能になります。
サンプル
# encoding: utf-8 # hoge = "hoge" # class NotFlatScope # puts hoge # def not_flat # puts hoge # end # end # NotFlatScope.new.not_flat # 上記ではhogeを参照出来ない hoge = "hoge" FlatScope = Class.new do puts hoge define_method :flat do puts hoge end end FlatScope.new.flat lambda { puts hoge }.call Proc.new do puts hoge end.call class Hage end h = Hage.new h.instance_eval do puts hoge end
出力
hoge hoge hoge hoge hoge