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

下面代码是测试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

时间: 2024-10-22 17:12:20

Opensturt和Struct区别的相关文章

C语言union关键字,union和struct区别

union 关键字的用法与struct 的用法非常类似. union 维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在union 中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址.例子如下: union StateMachine { char character; int number; char *str; double exp; }; 一个union 只配置一个足够大的空间以来容纳最大长度的数据成员,以上例而言,

struct和typedef struct区别

分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明) 这里的Stu实际上就是struct Student的别名.Stu==struct Student 另外这里也可以不写Student(于是也不能struct Student stu1;了,必须是Stu

c语言中union及struct区别

union(联合体)使用类似于struct(结构体),但是它与struct有如下明显差异: 1.union中可以定义多个成员变量,union的大小由最大的成员的大小决定.struct同样可由多个数据类型成员组成,struct的大小也是所有成员的大小之和(考虑对齐). 2.union一次只能使用其中一个成员,所有成员共享同一块内存.当对其它成员进行赋值,原来成员的值就不存在了.而struct成员的赋值是不会互相影响的. 3.union只能用其第一个成员类型的值进行初始化. 版权声明:本文为博主原创

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

转自:http://www.weixueyuan.net/view/6337.html C++语言继承了C语言的struct,并且加以扩充.在C语言中struct是只能定义数据成员,而不能定义成员函数的.而在C++中,struct类似于class,在其中既可以定义数据成员,又可以定义成员函数. 在C++中,struct与class基本是通用的,唯一不同的是如果使用class关键字,类中定义的成员变量或成员函数默认都是private属性的,而采用struct关键字,结构体中定义的成员变量或成员函数

Golang中 struct{} 和 struct{}{}区别

struct是Go中的关键字,用于定义结构类型.例如: type User struct { Name string Age int } struct {} :表示struct类型 struct {}是一个无元素的结构体类型,通常在没有信息存储时使用.优点是大小为0,不需要内存来存储struct {}类型的值. struct {} {}:表示struct类型的值,该值也是空. struct {} {}是一个复合字面量,它构造了一个struct {}类型的值,该值也是空. 例子 var set m

Swift中 Class和Struct的区别

类(Class)和结构体(Struct)区别 1.  内存管理方式不一样, 类引用类型, 分配在堆上. 结构体值类型,分配在栈上. 2. 类, 有析构. 结构体不能有析构, playground中测试直接卡死. 3. 结构体构造函数, 会自动生成带参数的构造器.类不会对有初始化赋值的属性, 生成带参数的构造器. 2. 类有继承特性,结构体没有继承特性,自然也不存在对成员属性和成员方法, 类属性和类方法的重载. 正因为结构体没有继承, 所以操作符函数, 需要static修饰, 而不能用class修

C++中struct与class的区别(转载)

很多初学者或者是想当然,或者是被网上的一些错误信息给误导,面试中问到class和struct区别时经常会说class可以继承而struct不可以继承,这是完全错误的.但在C#中,class与struct确实有这点区别(当然不止这一点).其实,在C++中,这两个关键词并没有大的区别,仅在细节上有些不同. 1. 字面上的区别 在字面上struct是structure的缩写,通常叫做“结构体”,在C语言里用于将多种数据.多个变量组织在一起,便于表达比较复杂的数据类型,在C++中为了兼容C语言保留了该关

结构和其他数据形式

结构体中关键词struct表示接下来的是一个结构 struct book{ ... }library:等同于struct book library; 初始化结构:struct book library = { "the ...", "dddd"}; struct book gif = { .value = 98.3,3.4 //紧跟着value }:数组是自动存储类,通常放在堆栈中.太大是把它变为静态的或外部的 #include<math.h>doubl

C++primer 第七章 类(有关类的相关定义)

 类的基本思想:数据抽象和封装.数据抽象是一种依赖于接口和实现分离的编程技术.类的接口包括用户所能执行的操作:类的实现则包括类的数据成员.负责接口实现的函数体以及所需的各种私有函数.封装实现了类的接口和实现的分离(用自己的话讲,就是封装把类的实现隐藏了,别人已将功能的实现帮你完成了,你只需要直接调用).       1.定义抽象数据类型:        类作用域:类本身就是一个作用域.       编译器分两步处理类:首先编译成员的声明:然后才是成员函数体.       A.定义read和pri