Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

メタプログラミングRuby | 魔術 | フラットスコープ

概要

フラットスコープ

内容

クロージャーを使って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