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区别相关推荐

  1. c++与c语言的struct和type struct区别

    struct和typedef struct区别 1 c语言 在C中定义一个结构体类型可用typedef简化声明变量语句,少写一个struct单词 //c语言定义结构体一般使用如下方式 typedef ...

  2. C/C++ struct 区别

    今天参看了louden用c编写的编译器,发现其中一些地方使用struct很奇妙.所以又研究了一下struct的区别,并发现c和c++在某些地方是有区别的. struct作为类的一种特例,是用来自定义数 ...

  3. c与c++中struct区别

    这里有两种情况下的区别. (1)C的struct与C++的class的区别. (2)C++中的struct和class的区别.       在第一种情况下,struct与class有着非常明显的区别. ...

  4. C++ class、struct区别

    一.默认访问控制不同(最主要) struct默认为public,class默认为private.这个访问控制既是指成员的默认访问属性,又指继承时默认的继承属性. 二.定义template时不同 在模版 ...

  5. struct和typedef struct区别

    分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student{int a;}Stu; 于是在声明变量的时候就可:St ...

  6. typedef struct和struct区别

    分三块来讲述: 1 首先: 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu stu1; 如果 ...

  7. c与c++的struct区别

    看了一些文章,总结了大概这四点,实际上是三点,两外一点说的是C++中的struct和class的区别 1. C++中struct是抽象数据类型(ADT),可以将struct当成类来处理,可以包含类的所 ...

  8. C++类class和结构体struct区别

    在C++中,没有抛弃C语言中的struct关键字,其意义就在于给C语言程序开发人员有一个归属感,并且能让C++编译器兼容以前用C语言开发出来的项目. 在C++中,struct类似于class,在其中既 ...

  9. C语言和C++中Struct区别

    在C语言中,不能以结构体名来命名变量 在C++中,可以以结构体名来命名变量 长知识了.

最新文章

  1. NLP任务中的文本预处理步骤、工具和示例
  2. 人工智能是如何应用于智能交通领域
  3. Spring boot优点
  4. 一起谈.NET技术,C#权限管理和设计浅谈
  5. IE6 浏览器常见兼容问题
  6. JWT 的退出登录方法
  7. 阿里网盘资源查找使用技巧
  8. 我经历的日本东京交通
  9. google chrome 官方下载安装的方法和离线包官方下载
  10. 文笔很差系列1 - 也谈谈AlphaGo
  11. python多元回归分析_多变量分析:多元回归分析
  12. 如何用Sonic云真机打王者
  13. Mysql int(10) int(11) 字符长度的设置
  14. 树状数组(二)——#10115. 「一本通 4.1 例 3」校门外的树
  15. kindeditor上传图片时候,上传成功了,但是页面上却提示失败
  16. [转] 高度近视也不用带眼镜了 只要有恒心,坚持三年,即使800度近视也可以根治。
  17. 字符串 Z 字形变换(Java)
  18. 基于Kinetis 60、HC-SR04超声测距模块的简易水情测量装置
  19. 对未来计算机的畅想作文1500,新年畅想作文1500字
  20. ReID:常用损失函数总结

热门文章

  1. linux代替ps的软件,Photoshop的开源替代品 图像编辑器GIMP迎来25岁生日
  2. Codeforces 1114C(数论+唯一分解)
  3. ftl不存在为真_科学网—世界上第一个真正的超光速实验 - 张操的博文
  4. 处理接口超时_开发中那些事儿:为啥update会超时呢?
  5. php $path_info,PHP $_SERVER['PATH_INFO'] 无法获取到内容怎么办?
  6. linux 安装org2pg_Ora2Pg的安装和使用
  7. ArcGIS Engine中如何获取Map中已经选择的要素呢(转)
  8. 万豪联姻蚂蚁金服 结合优势打造共赢
  9. Android 关于java.util.NoSuchElementException错误
  10. ios去掉字符串中的某个字符_iOS如何过滤掉文本中特殊字符