Structs in ruby

Ruby中的Struct是一个特殊的类,只([color=red]仅仅只[/color])用来存取数据

先看一个例子struct的例子

Person = Struct.new(:name, :gender, :age)
jia = Person.new("zhang san", "male", 20)
p jia
puts jia.name + jia.gender + " " + jia.age.to_s
执行结果如下:
#<[color=orange]struct Person[/color] [color=orange]name=[/color]"zhang san", [color=orange]gender=[/color]"male", [color=orange]age=[/color]20>
zhang sanmale 20
同普通的类一样可以正常赋值与获取成员变量的值,但是Struct与类不同,在测试中发现它更像C/或者C++中的结构体,可能也由此得名。

[b]进行如下测试:[/b]
给Person类进行扩展
Person = Struct.new(:name, :gender, :age)
class Person
def show_person
puts @name + @gender + " " + @age.to_s
end
end
jia = Person.new("zhang san", "male", 20)
p jia
jia.show_person

执行结果如下:
#<[color=orange]struct Person[/color] [color=orange]name=[/color]"zhang san", [color=orange]gender=[/color]"male", [color=orange]age=[/color]20>
struct_test.rb:14:in `show_person': undefined method `+' for nil:NilClass (NoMethodError)
from struct_test.rb:22:in `<main>'
可见对Person的扩展并没有起作用

[b]采用通常的方法,使用class定义Person类[/b]

class Person
attr_accessor :name, :gender, :age

def initialize(name, gender, age)
@name = name
@gender = gender
@age = age
end
end

class Person
def show_person
puts @name + @gender + " " + @age.to_s
end
end

if __FILE__ == $0
jia = Person.new("zhang san", "male", 20)
p jia
jia.show_person
end

#<[color=orange]Person[/color]:0x9dcc0cc [color=orange]@name[/color]="zhang san", [color=orange]@gender[/color]="male", [color=orange]@age=[/color]20>
zhang sanmale 20

[b]可以注意到用struct定义的Person并没有成员变量,并且是以struct开头表示[/b]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值