Structs in ruby_Ruby_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > Ruby > Structs in ruby

Structs in ruby

 2012/12/16 17:21:38  jack_boy  程序员俱乐部  我要评论(0)
  • 摘要:Ruby中的Struct是一个特殊的类,只(仅仅只)用来存取数据先看一个例子struct的例子Person=Struct.new(:name,:gender,:age)jia=Person.new("zhangsan","male",20)pjiaputsjia.name+jia.gender+""+jia.age.to_s执行结果如下:#<structPersonname="zhangsan",gender="male",age=20>
  • 标签:Ruby
Ruby中的Struct是一个特殊的类,只(仅仅只)用来存取数据

先看一个例子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
执行结果如下:
#<struct Person name="zhang san", gender="male", age=20>
zhang sanmale 20
同普通的类一样可以正常赋值与获取成员变量的值,但是Struct与类不同,在测试中发现它更像C/或者C++中的结构体,可能也由此得名。

进行如下测试:
给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

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

采用通常的方法,使用class定义Person类
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

#<Person:0x9dcc0cc @name="zhang san", @gender="male", @age=20>
zhang sanmale 20

可以注意到用struct定义的Person并没有成员变量,并且是以struct开头表示
发表评论
用户名: 匿名