【翻译】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方法中
示例见上。
分享到:
相关推荐
# 编程之魂:Ruby中的元编程艺术 Ruby 是一种设计精良的高级编程语言,自1995年由日本开发者松本行弘(Yukihiro "Matz" Matsumoto)创建以来,就因其优雅简洁的语法、强大的功能以及高度的灵活性而受到众多程序员的...
Ruby对象属性实验室 目标 定义Ruby类。 定义读取和写入实例变量的方法。 使用方法和实例变量创建对象属性。 概述 本实验全部关于使用类中的实例变量来创建表示对象的属性或属性的方法。 指示 通过打开“ learn ...
**Ruby FastJSONAPI:高效实现JSON:API序列化的利器** Ruby FastJSONAPI 是一个专为Ruby对象设计的高性能JSON:API序列化库。它旨在帮助开发者以简洁、高效的方式将Ruby对象转换为符合JSON:API规范的JSON格式,极大...
通过以上步骤,我们成功地将Graphic对象的attributes属性解析并展示在DataGrid中,实现了图与属性的互动。需要注意的是,这种方法适用于处理任意数量的图层和字段,使得属性数据显示更加灵活和直观。在实际开发过程...
Ruby是一种动态、面向对象的编程语言,而RABL(Ruby API Builder Language)是Ruby社区中一个流行的模板库,专门用于生成结构化的数据输出,如JSON、BSON、XML、Plist和MsgPack。这些格式在Web开发中尤其重要,因为...
在标签 "Ruby开发-Ruby实现/编译" 中,我们可以推断这是一个关于 Ruby 语言的开发项目,可能涉及到了 Ruby 代码的编写和实现,或许还包含了一些编译或解释器层面的优化。 在压缩包文件名称 "attributary-master" 中...
Attributes结构在Java编程中是一个非常重要的概念,尤其对于理解类文件的元数据有着关键的作用。在Java类文件中,每个字段、方法或者类定义都可以有零个或多个属性(Attributes)。这些属性提供了额外的信息,例如...
还有类和对象的生命周期,包括初始化(Initialization)、方法定义(Method Definition)、模块使用(Module Usage)等。Ruby的标准库非常丰富,涵盖了网络通信、文件系统操作、正则表达式等诸多方面,这些都是编程...
本篇文章将详细探讨“Ruby XML封装好的操作XML对象”的知识点,通过分析`xml_parse.rb`这个文件,我们将了解到如何在Ruby中有效地处理XML。 首先,我们需要了解Ruby中两个主要的XML处理库:Nokogiri和REXML。...
在实际项目中,httparty通常与其他库(如ActiveModel::Serializers或YAML)结合使用,以实现更高效的序列化和反序列化。它也可以与OAuth2或其他身份验证方案配合,以安全地进行身份验证和授权。 总的来说,Ruby-...
在`XmlBuilder.cs`源代码文件中,我们可能会看到实现这些功能的相关方法和类。通过阅读和理解这个文件,开发者可以更好地掌握如何使用这个类库来处理XML文档的DocumentElement和Attributes,从而提升XML操作的效率和...
本文档将详细介绍如何使用两种不同的方法来创建并初始化数据文件,以及在创建过程中遇到错误时如何处理。这涉及到Windows API中的`CreateFile`函数的应用。 #### 二、初始化文件的方式 在示例代码中,主要使用了两...
在Ruby中,这通常需要一些预先计算好的农历数据表,或者利用现有的开源库,如`lunar-calendar`,来帮助实现这些计算。 5. **输出格式化**:转换后的日期可能需要按照特定格式输出,例如`年月日`格式。 ```ruby def...
一种更友好、无依赖的 ruby 对象初始化方法。 用法 宝石档案: gem 'better-initialize', github: 'huned/better-initialize' 代码: require 'better_initialize' class Pizza include BetterInitialize ...
在深入探讨C#中的属性(Attributes)之前,我们先来明确一下这个概念的基本定义与功能。属性是C#中一种非常强大的元数据附加机制,它允许开发者为代码元素(如类、方法、属性等)添加额外的信息或元数据。这种机制在...
【Attributes在Visual C++中的应用】 Attributes在编程领域中,特别是在Microsoft的Visual C++环境中,是一种强大的元数据机制。它们允许程序员向代码添加特定的声明,这些声明在编译时和运行时为编译器、运行时...
而Ruby-Kramdown就是Ruby编程语言中的一个高效、纯Ruby实现的Markdown超集转换器,它为Markdown处理提供了更多的可能性。 **Kramdown的特点与优势** 1. **速度**:Kramdown以其高效的解析和转换性能著称,能够在...
Ruby-JSONAPIResources 是一个基于 Ruby 的框架,专门用于构建遵循 JSON API 规范的服务器端应用。JSON API 是一种标准化的数据交换格式,它旨在提高客户端与服务器之间的数据交互效率和可读性,广泛应用于RESTful ...
在Swift编程语言中,处理富文本(即包含各种属性如字体、颜色、对齐方式等的文本)是一项常见的任务。通常,我们使用`NSAttributedString`及其`NSMutableAttributedString`的子类来实现这一目标。然而,这些类在处理...
在描述中提到的"普通带功能的Ruby模型",就是指使用`ActiveAttr`构建的这类模型,它们能够进行基本的数据管理和验证,但没有与数据库的直接关联。 在`ActiveAttr`中,主要包含以下几个关键模块: 1. **Attributes*...