術-機構:単例類の開def obj.methとclass<<obj;def methの違い
905 ワード
一、単例クラスを開く方法
rubyで単一のクラスを開くには、
二、単例クラスを開く方法の違い
通常、2つには違いはありません.唯一の違いは、定数解析の方法で最上位レベルの定数Nがある場合、オブジェクトの単一クラスにNを定義することです.
コードを実行すると、次の結果が得られます.
この違いは定数可視性がコードに及ぼす影響では珍しく,ほとんどの場合,この2つの単一の方法で定義される方法は互いに置き換えられる.しかし、それらの違いを理解することは価値があり、予想外の結果を説明するために使用することができます.
三、提案
1.単一クラスに追加する方法がそれほど多くない場合、単一クラスを開き、単一メソッドを構築するには、短い
四、参考資料
1.『Rubyプログラマー修練の道(第2版)』[美]David A.Black--第13章1節(直接検査と修正単例類)
rubyで単一のクラスを開くには、
def obj.meth
の形式とclass << obj; def meth
の形式の2つの方法があります.二、単例クラスを開く方法の違い
通常、2つには違いはありません.唯一の違いは、定数解析の方法で最上位レベルの定数Nがある場合、オブジェクトの単一クラスにNを定義することです.
N = 1 # N
obj = Object.new
class << obj # obj
N = 2 #obj N
def show_N
puts N
end
end
def obj.show_N_another_way
puts N
end
コードを実行すると、次の結果が得られます.
obj.show_N # 2
obj.show_N_another_way # 1
この違いは定数可視性がコードに及ぼす影響では珍しく,ほとんどの場合,この2つの単一の方法で定義される方法は互いに置き換えられる.しかし、それらの違いを理解することは価値があり、予想外の結果を説明するために使用することができます.
三、提案
1.単一クラスに追加する方法がそれほど多くない場合、単一クラスを開き、単一メソッドを構築するには、短い
def obj.meth
形式を使用します.2.単一クラスに追加する方法が多く、または単一クラスにモジュールを追加する必要がある場合、class << obj; def meth
の形式はより柔軟で美しい.四、参考資料
1.『Rubyプログラマー修練の道(第2版)』[美]David A.Black--第13章1節(直接検査と修正単例類)