Rubyシングルトンメタプログラミング

class_evalは、すべてのオブジェクトに共通であるわけではありません。実際、モジュールクラスではシングルトンメソッドとして定義されているため、モジュールまたはシングルトンでのみ使用できます。このメソッドをモジュールで使用する場合、エイリアスModule_evalもあります。このエイリアスを使用すると、コードをより簡潔で理解しやすくすることができますが、2つのメソッドの機能に違いはありません。これらの評価メソッドのコンテキストを判別する簡単な方法があります。それは、メソッドの受信者を調べることです。これが、instance_valを使用してインスタンス変数にアクセスし、class_evalを使用してインスタンスメソッドを定義できる理由です。これらのメソッドが呼び出されると、受信者を入力コードブロックに渡すこともできます。この使用法は、レシーバーがコードブロックに直接関連していない場合に役立ちます。
class Widget
attr_accessor(:name、:number)
def initialize(&姜修艳)
instance_eval(&姜修艳)if姜修艳
end
end
w = Widget.new do | widget |widget。name
=“ Elbow Grease”
@ number = 0
end
print(w .Name)
print(w.Quantity)
ここに画像の説明を挿入
効果的なRuby ----- 115ページから116ページ—Rubyプログラムを改善するための48の提案-[米国] Peter J. Jones—Liu Lu、Yang Zhengquan、Qin Wuyi、Mengによる翻訳ファンチャオ

おすすめ

転載: blog.csdn.net/m0_38127487/article/details/114017679