Rubyのスコープ
スコープ
スコープとは、変数の見える範囲のことです。
普通にプログラムを書いてると分かると思います。
module ModuleScope class ClassScope1 def self.method_scope1 var1 = 1 #var1はローカル変数 end def self.method_scope2 @var2 = 2 #@var2はインスタンス変数 puts var1 #ここではvar1は見えない(スコープの外にある) end end class ClassScope2 #このクラスではvar1、@var2は見えない def self.method_scope3 puts @var2 end end end > ModuleScope::ClassScope1.method_scope2 NameError: undefined local variable or method `var1' for ModuleScope::ClassScope1:Class
各変数のスコープ
グローバル変数を使うより、mainオブジェクトのインスタンス変数にする方がいいです。
mainオブジェクトはトップレベルのオブジェクトで、irbでselfと打つとmainと出ます。
スコープゲート
スコープを変更する以下の3つのキーワードをスコープゲートと呼びます
- class
- module
- def
rubyは上のキーワードを見つけるとスコープを切り替えます。
フラットスコープ
上のスコープゲートを使わなければスコープを取り払うことができます。
つまり、クラス作成にはClass.new()、メソッド作成にはdefine_method()メソッドを使います。
var1 = 1 ClassScope1 = Class.new() do puts var1 var2 = 2 define_method(:method_scope1) do puts var2 end end > ClassScope1.new.method_scope1 => 2
スコープが取り払われました。
参考
- 作者: Paolo Perrotta,角征典
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/10/10
- メディア: 大型本
- この商品を含むブログ (1件) を見る