Ruby中的Struct是一个特殊的类,只([color=red]仅仅只[/color])用来存取数据
先看一个例子struct的例子
#<[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类进行扩展
执行结果如下:
#<[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]
#<[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]
先看一个例子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]