`
jack_boy
  • 浏览: 139738 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Structs in 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开头表示
分享到:
评论

相关推荐

    Ruby.Pocket.Reference

    For instance, "ajax" and "struts" are web development technologies, indicating that the Ruby reference might be useful in web application development. "C#" and "Java" are other programming languages,...

    where code and content meet

    Struts, Java Server Faces, Ruby on Rails or something else. These tools can save you a lot of work, but you will have to integrate them, and there is no question that a non-trivial site with ...

    最新Java电子书.pdf

    "Struts 2 in Action"、"Java Look And Feel Design Guidelines"和"Advanced Topics Java CAPS Basics_ Implementing Common EAI Patterns"涵盖了MVC框架Struts 2、界面设计和企业应用集成。 "Web Service Patterns...

    Apress - Automating Linux and Unix System Administration

    虽然标签部分列出了一些编程语言(如 C#, AJAX, Struts, C/C++, JSP),但这些标签可能与本书内容不直接相关。因此,我们将主要围绕Linux和Unix系统自动化管理的相关技术进行探讨。 ### 一、自动化的重要性 自动化...

    单点登录分析报告.pdf

    1. 100% Java实现,利用了JAAS(Java Authentication and Authorization Service)、WEB Services/SOAP、EJB、Struts、Servlet/JSP等标准技术。 2. 基于JAAS的跨应用程序和主机的SSO功能。 3. 可插拔设计,允许灵活...

    Java_Web开发教程.pdf

    - **Ruby**:Ruby on Rails 框架极大地简化了 Web 开发流程,特别适合敏捷开发。 - **Java**:尽管学习曲线较陡峭,但其强大的生态系统、高并发处理能力和稳定性使其在大型企业级应用中占有一席之地。 - **Node.js**...

    Ebooks For Dummies Collection

    Buying A Property In Eastern Europe For Dummies.pdf Buzz Marketing With Blogs For Dummies.pdf C: C For Dummies.pdf C # Sharp 2005 For Dummies Oct 2005 Ebook-ling.pdf C++ For Dummies 5th Ed.pdf C++ ...

Global site tag (gtag.js) - Google Analytics