ruby 使用Struct场景
替代类使用,节省代码,清晰简洁
使用Struct
SelectOption = Struct.new(:display, :value) do
def to_ary
[display, value]
end
end
option_struct = SelectOption.new("Canada (CAD)", :cad)
puts option_struct.display
# Canada (CAD)
puts option_struct.to_ary.inspect
# ["Canada (CAD)", :cad]
使用类
class SelectOption
attr_accessor :display, :value
def initialize(display, value)
@display = display
@value = value
end
def to_ary
[display, value]
end
end
option_struct = SelectOption.new("USA (USD)", :usd)
puts option_struct.display
# USA (USD)
puts option_struct.to_ary.inspect
# ["USA (USD)", :usd]
临时的数据结构
例如一个使用两个日期来过滤表单数据的例子,你可以在过滤的地方使用两个值,也可以创建一个FilterRange Struct结构, 这个结构有一个from_date和to_date属性, 你或许需要一个方法来统计两个日期间的数据,你也可以穿件一个类,但是用struct更简单,同时帮你清理代码
require 'ostruct'
require 'date'
SelectOption = Struct.new(:from_date, :to_date) do
def filter_data(date)
return true if date>=from_date..date<=to_date
end
end
option_struct = SelectOption.new(Time.now, Time.now+10)
p option_struct.filter_data(Time.now+4)
类内部数据
class Person
Address = Struct.new(:street_1, :street_2, :city, :province, :country, :postal_code)
attr_accessor :name, :address
def initialize(name, opts)
@name = name
@address = Address.new(opts[:street_1], opts[:street_2], opts[:city], opts[:province], opts[:country], opts[:postal_code])
end
end
leigh = Person.new("Leigh Halliday", {
street_1: "123 Road",
city: "Toronto",
province: "Ontario",
country: "Canada",
postal_code: "M5E 0A3"
})
puts leigh.address.inspect
# <struct Person::Address street_1="123 Road", street_2=nil, city="Toronto", province="Ontario", country="Canada", postal_code="M5E 0A3">
作为测试使用的Stub
KCup = Struct.new(:size, :brewing_time, :brewing_temp)
colombian = KCup.new(:small, 60, 85)
brewer = Brewer.new(colombian)
expect(brewer.brew).to eq(true)
Struct相比较penstruct,速度快, 但是openStruct可以动态添加属性,
australia = OpenStruct.new(:country => "Australia", :population => 20_000_000)
australia.name='jack'
p australia
ruby 使用Struct场景的更多相关文章
- 3-4 8精彩算法集合。struct(C,ruby) Ruyb类对象和结构体, 3-5
在本章我遇到了c语言的struct数据,即自定义的数据结构.比如: struct edge { int u; int v; int w; }; 题目给了一组数据,用edge储存.需要按照w大小排序.我 ...
- ruby中symbol
Symbol 是什么 Ruby 是一个强大的面向对象脚本语言(本文所用 Ruby 版本为1.8.6),在 Ruby 中 Symbol 表示“名字”,比如字符串的名字,标识符的名字. 创建一个 Symb ...
- C#语言struct结构体适用场景和注意事项
在C#语言中struct结构体和class之间的区别主要是值类型和引用类型的区别,但实际上如果使用不当是非常要命的.从Win32时代过来的人对于struct一点不感觉陌生,但是却反而忽略了一些基本问题 ...
- struct和class的不同以及struct的应用场景
struct在C#中被用来定义结构,它是一种比类小的数据类型.和类一样都是创建对象的模板,可以有自己的数据以及处理和访问数据的方法. struct的用法: struct FurnitureSize { ...
- Go -- 在Go语言中使用JSON struct
Encode 将一个对象编码成JSON数据,接受一个interface{}对象,返回[]byte和error: func Marshal(v interface{}) ([]byte, error) ...
- (转)Redis 的 5 个常见使用场景
在这篇文章中,我们将阐述 Redis 最常用的使用场景,以及那些影响我们选择的不同特性. 1.会话缓存(Session Cache) 最常用的一种使用Redis的情景是会话缓存(session cac ...
- CSharpGL(2)设计和使用场景元素及常用接口
CSharpGL(2)设计和使用场景元素及常用接口 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更适合入 ...
- MMORPG大型游戏设计与开发(服务器 游戏场景 动态场景与副本)
场景的内容讲解到今天算是暂时划上一个句号了,接下来为大家讲解的是AI部分(大型AI),如果有兴趣的朋友不妨持续关注这些文章,大家一起学习和进步.动态场景和副本是场景中特殊的类型,副本在这里想必已经是无 ...
- MMORPG大型游戏设计与开发(服务器 游戏场景 搜索机)
双十一注定是忙碌的日子,所以到了现在我才将今天自己学习的内容拿出来跟大家分享.搜索机是我自己暂时取的名字,其实简单的说就是场景里提供搜索的一个工具,负责场景对象的范围搜索和获取.空洞的理论总是让人一头 ...
随机推荐
- Unity3d 适配机型
1,为了是更多机型能够安装你的游戏,Unity3d Device Filter设置:ARMv6 with VFP: 2,华为C8600,一运行强制停止: 参考网址:http://forum.unity ...
- CorelDRAW中拆清除调和效果的技巧
图形对象应用的调和效果达不到用户的满意,可以将该种调和效果清除,清除调和效果后,只保留起始对象和结束对象.CorelDRAW软件支持两种方法来清除调和对象,本教程将详解CorelDRAW中清除调和效果 ...
- sql server 创建文件组,文件
添加文件组: --ADD FILEGROUP 增加文件组 ALTER DATABASE TestHekaton ADD FILEGROUP [Report] ALTER DATABASE TestH ...
- python-ansible
http://sofar.blog.51cto.com/353572/1579894 http://www.aikaiyuan.com/6299.html http://docs.ansible.co ...
- OpenJudge计算概论-计算三角形面积【海伦公式】
/*============================================== 计算三角形面积 总时间限制: 1000ms 内存限制: 65536kB 描述 平面上有一个三角形,它的 ...
- python pydoc
pydoc是Python自带的模块,主要用于从python模块中自动生成文档,这些文档可以基于文本呈现的.也可以生成WEB 页面的,还可以在服务器上以浏览器的方式呈现! windows powersh ...
- maven项目依赖小试牛刀
1.先建立空的wbh-parent,留下pom.xml;将项目中用的jar包依赖全放进去: 2.建立core项目,当然全是maven的,这个建好后,是用来让其他项目引用的,所以必须用maven ins ...
- 【jmeter】ANT批量执行Jmeter脚本
一.环境准备: 1.Jdk1.6或以上:命令行输入:java -version,出现如下提示说明安装成功 2.ANT下载:http://ant.apache.org/bindownload.cgi 命 ...
- lucene 区分大小写 问题以及解决方案
转自:http://blog.csdn.net/huaishu/article/details/8543236 本文介绍lucene区分大小的原因,和解决方案.关于lucene大小写敏感问题我总结一下 ...
- 纯js上传控件——fineuploader
fineuploader是一款基于ajax实现文件上传的插件,具有以下有点: A:支持文件上传进度显示. B:文件拖拽浏览器上传方式 C:Ajax页面无刷新. D:多文件上传. F:跨浏览器. E:跨 ...