【翻译】在ruby中实现attributes的lazily initialization(惰性初始化)


【翻译】Ruby: Lazily Initialized Attributes
url(注:原文网址访问不到,估计是被和谐了):
http://blog.jayfields.com/2007/07/ruby-lazily-initialized-attributes.html
http://95555.info/index.php?q=aHR0cDovL2Jsb2cuamF5ZmllbGRzLmNvbS8yMDA3LzA3L3J1YnktbGF6aWx5LWluaXRpYWxpemVkLWF0dHJpYnV0ZXMuaHRtbA%3D%3D&hl=0111101001&s=mza5mdcxmjewndjon01vbjbwbq==


在第一次访问一个attribute时对其进行初始化,而不是在构造函数里面完成。
[code]
class Employee 
 def initialize   
  @emails = [] 
 end
end
[/code]
变为
[code]
class Employee 
 def emails   
  unless instance_variable_defined?(:@emails)   
   @emails = []
  end
  @emails 
 end
end
[/code]
动机:
增加代码可读性。
上述例子非常简单。如果Employee这个类有多个属性需要初始化的话,构造函数就需要包含所有的初始化逻辑。而采取lazy initialization的方式可以把各个属性的初始化逻辑放置在它们自己的访问函数中。
运作机制:
将初始化逻辑移到属性的getter方法中
示例见上。

 

posted on 2007-07-30 16:00  小熊bryan  阅读(409)  评论(0编辑  收藏  举报