Opensturt和Struct区别
1 OpenStruct和Struct区别,Opestruct你需要创建时,直接给属性赋值,而Struct需要先定义属性后 ,再给属性赋值。选择哪个就看你对属性赋值的时机,
2 Struct和Opensturt表示的属性之间关系比hash更紧密一些。但是他们没有作为类的实例方法,一组可选的函数,如果需要给属性提供特殊方法,最好需要创建一个类
3 Openstruct可以使用hash转换成一个对象
h = { a: 1, b: 2 }
o = OpenStruct.new(h)
o.a = 1
o.b = 2
4 Struct可以快速定义一个类
class MyClass < Struct.new(:a,:b,:c)
end
m = MyClass.new
m.a = 1
5 Struct相比较penstruct,速度快, 但是openStruct可以动态添加属性,
australia = OpenStruct.new(:country => "Australia", :population => 20_000_000)
australia.name='jack'
p australia
下面代码是测试Opensturct和Struct速度
require 'benchmark'
require 'ostruct'
REP = 100000
User = Struct.new(:name, :age)
USER = "User".freeze
AGE = 21
HASH = {:name => USER, :age => AGE}.freeze
Benchmark.bm 20 do |x|
x.report 'OpenStruct slow' do
REP.times do |index|
OpenStruct.new(:name => "User", :age => 21)
end
end
x.report 'OpenStruct fast' do
REP.times do |index|
OpenStruct.new(HASH)
end
end
x.report 'Struct slow' do
REP.times do |index|
User.new("User", 21)
end
end
x.report 'Struct fast' do
REP.times do |index|
User.new(USER, AGE)
end
end
end
转载于:https://www.cnblogs.com/or2-/p/5495421.html
Opensturt和Struct区别相关推荐
- c++与c语言的struct和type struct区别
struct和typedef struct区别 1 c语言 在C中定义一个结构体类型可用typedef简化声明变量语句,少写一个struct单词 //c语言定义结构体一般使用如下方式 typedef ...
- C/C++ struct 区别
今天参看了louden用c编写的编译器,发现其中一些地方使用struct很奇妙.所以又研究了一下struct的区别,并发现c和c++在某些地方是有区别的. struct作为类的一种特例,是用来自定义数 ...
- c与c++中struct区别
这里有两种情况下的区别. (1)C的struct与C++的class的区别. (2)C++中的struct和class的区别. 在第一种情况下,struct与class有着非常明显的区别. ...
- C++ class、struct区别
一.默认访问控制不同(最主要) struct默认为public,class默认为private.这个访问控制既是指成员的默认访问属性,又指继承时默认的继承属性. 二.定义template时不同 在模版 ...
- struct和typedef struct区别
分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student{int a;}Stu; 于是在声明变量的时候就可:St ...
- typedef struct和struct区别
分三块来讲述: 1 首先: 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu stu1; 如果 ...
- c与c++的struct区别
看了一些文章,总结了大概这四点,实际上是三点,两外一点说的是C++中的struct和class的区别 1. C++中struct是抽象数据类型(ADT),可以将struct当成类来处理,可以包含类的所 ...
- C++类class和结构体struct区别
在C++中,没有抛弃C语言中的struct关键字,其意义就在于给C语言程序开发人员有一个归属感,并且能让C++编译器兼容以前用C语言开发出来的项目. 在C++中,struct类似于class,在其中既 ...
- C语言和C++中Struct区别
在C语言中,不能以结构体名来命名变量 在C++中,可以以结构体名来命名变量 长知识了.
最新文章
- NLP任务中的文本预处理步骤、工具和示例
- 人工智能是如何应用于智能交通领域
- Spring boot优点
- 一起谈.NET技术,C#权限管理和设计浅谈
- IE6 浏览器常见兼容问题
- JWT 的退出登录方法
- 阿里网盘资源查找使用技巧
- 我经历的日本东京交通
- google chrome 官方下载安装的方法和离线包官方下载
- 文笔很差系列1 - 也谈谈AlphaGo
- python多元回归分析_多变量分析:多元回归分析
- 如何用Sonic云真机打王者
- Mysql int(10) int(11) 字符长度的设置
- 树状数组(二)——#10115. 「一本通 4.1 例 3」校门外的树
- kindeditor上传图片时候,上传成功了,但是页面上却提示失败
- [转] 高度近视也不用带眼镜了 只要有恒心,坚持三年,即使800度近视也可以根治。
- 字符串 Z 字形变换(Java)
- 基于Kinetis 60、HC-SR04超声测距模块的简易水情测量装置
- 对未来计算机的畅想作文1500,新年畅想作文1500字
- ReID:常用损失函数总结
热门文章
- linux代替ps的软件,Photoshop的开源替代品 图像编辑器GIMP迎来25岁生日
- Codeforces 1114C(数论+唯一分解)
- ftl不存在为真_科学网—世界上第一个真正的超光速实验 - 张操的博文
- 处理接口超时_开发中那些事儿:为啥update会超时呢?
- php $path_info,PHP $_SERVER['PATH_INFO'] 无法获取到内容怎么办?
- linux 安装org2pg_Ora2Pg的安装和使用
- ArcGIS Engine中如何获取Map中已经选择的要素呢(转)
- 万豪联姻蚂蚁金服 结合优势打造共赢
- Android 关于java.util.NoSuchElementException错误
- ios去掉字符串中的某个字符_iOS如何过滤掉文本中特殊字符