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
Opensturt和Struct区别的更多相关文章
- 【转】 class 和 struct 区别
转载来源:http://blog.sina.com.cn/s/blog_48f587a80100k630.html C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据 ...
- struct和typedef struct区别
分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可 ...
- C语言union关键字,union和struct区别
union 关键字的用法与struct 的用法非常类似. union 维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在union 中所有的数据成员共用一个空间,同一时间 ...
- struct 区别 在C 和C++ 中
C语言中: Struct是用户自定义数据类型(UDT). C++语言中: Struct是抽象数据类型(ADT),支持成员函数的定义. 在C++中,struct的成员的默认访问说 ...
- C++ class、struct区别
一.默认访问控制不同(最主要) struct默认为public,class默认为private.这个访问控制既是指成员的默认访问属性,又指继承时默认的继承属性. 二.定义template时不同 在模版 ...
- C++中的class和struct区别
1,经过不停的改进,结构体 struct 变得原来越不像它在 C 语言中的样子了: 1,struct 在 C 语言中仅为了定义一个变量的集合,仅此而已,不能定义函数: 2,struct 在 C++ 中 ...
- 2.5 C++类class和结构体struct区别
参考:http://www.weixueyuan.net/view/6337.html 总结: 在C++中,struct类似于class,在其中既可以定义数据成员,又可以定义成员函数. 在C++中,s ...
- C++中class和struct区别
1.存储不同 结构体使用栈存储(Stack Allocation),而类使用堆存储(Heap Allocation). 栈的空间相对较小.但是存储在栈中的数据访问效率相对较高. 堆的空间相对较大.但是 ...
- c# class struct区别
一句话,前者引用类型,后者值类型,适合高性能的情况,但不可存储大数据.
随机推荐
- 关于margin和padding的总结
总结一下: 要想实现如(图一)效果,(即一个div中的子元素与父元素有间距): 如果类名为.middle的父元素没有写border,则类名为firstChild的子元素设置margin-top,会导致 ...
- 浅拷贝,深拷贝---ios
#import <Foundation/Foundation.h> @interface Father : NSObject <NSCopying,NSMutableCopying& ...
- How to drop a PostgreSQL database if there are active connections to it?
1.PostgreSQL 9.1 and below: SELECT pg_terminate_backend(pg_stat_activity.procpid) FROM pg_stat_activ ...
- Linux进程间通信-匿名管道
前面我们讲了进程间通信的一种方式,共享内存.下面看一看另一种机制,匿名管道.1.什么是管道管道是一个进程的数据流到另一个进程的通道,即一个进程的数据输出作为另一个进程的数据输入,管道起到了桥梁的作用. ...
- python_Day_02[数组、列表、元组之篇]
一.对python中.pyc的理解 1).pyc文件可以理解为是python编译好的字节码文件,即只有python解释器才能读懂,类似于java中class文件 2)python运转过程: 当pyth ...
- 07-Java 中的IO操作
1.Java IO简介: (1)I/O :in \out 即输入与输出.基本功能:读写. (2)IO流:作用:读写设备上的数据,硬盘文件.内存.键盘.网络-- 根据数据的走向,可分为:输入流.输出流. ...
- ajax用户名案例(重点)
要求:失去焦点时如下效果 主页代码 <body> 用户名:<input type="text" id="a" /><div i ...
- MongoDB 启动mongo不带DB
> mongo --nodb > conn = new Mongo("localhost:27017"); > db = conn.getDB("tes ...
- nova分析(9)—— nova-novncproxy
nova提供了novncproxy代理支持用户通过vnc来访问虚拟机,用户可以通过websocket.java客户端或者spicehtml5来访问.通过websket访问虚拟机的功能已经集成到hori ...
- SQLite介绍、学习笔记、性能测试
SQLite介绍.学习笔记.性能测试 哪些人,哪些公司或软件在用SQLite: Nokia's Symbian,Mozilla,Abobe,Google,阿里旺旺,飞信,Chrome,FireFox可 ...