`
singleant
  • 浏览: 375260 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

【ruby】ruby对象模型

    博客分类:
  • ruby
阅读更多

学习ruby,最基础的是理解ruby的对象模型,经过这几天抽空学习,大致总结了下。

 

先看一下代码示例

 

class Bird
	@@legs=2
	
	def eat
	   puts "i am eating"
	end

	def comefrom(location)
	   @birthplace=location
	   puts "i am come from #{@birthplace},i have #{@@legs} legs. "
	end
end

class Crow < Bird
    @plumecolor="black"
	
	def peck
	   puts "i am pecking. color is :#{@plumecolor}"
	end
	
	def self.showcolor
		puts "plume color is:#{@plumecolor},i have #{@@legs} legs."
		@plumecolor
	end
end

bird=Bird.new
crow1=Crow.new
crow2=Crow.new
def crow2.speaking
   @canspeak=true
   puts "im speaking"
end
bird.eat
crow1.peck
crow2.speaking
#crow1.speaking
puts "Crow's color #{Crow.showcolor}"
crow2.comefrom("north")
bird.comefrom("north")

 代码说明:

 

1.定义了两个类,Bird和Crow,Crow继承了Bird

2.定义了几个不同的变量,实例变量、类实例变量、类变量。@birthplace属于实例变量。@plumecolor属于类实例变量。@@legs属于类变量。从示例可以看出,实例可以访问实例变量和类变量,访问不了类实例变量,

3.crow2和crow1都属于类Crow的对象实例,但是crow2比crow1多一个方法叫speaking。这个方法属于单件方法,存储在对象的eigenclass中。

 

基于以上代码说明,画下以上代码的底层对象模型:



 说明:

C代表所属类的意思,左边是对象右边是类。

S代表父子类的意思,下面是子类上边是父类。

从对象模型图可以看出:

1.类本身也是一个对象,该对象所属的类是一个EigenClass。

2.类的集成结构,又体现了EigenClass的集成结构。

3.EigenClass继承自Class

4.ruby对象的方法查找路径是先向右一步,再往上查,随类实例的方法和实例的方法是隔离的。如crow2的方法一定在#crow2、Crow、Bird、Object、BaseObject里依次查找。而对象Crow的方法一定在#Crow、#Bird、#Object、#BaseObject、Class里依次查找。

  • 大小: 48.3 KB
0
0
分享到:
评论

相关推荐

    Ruby Hack Guide中文版.chm

    第一部分的内容包括对Ruby语言一个概要介绍和对Ruby对象模型的讲解。从我个人阅读的感觉来看,第一章对于Ruby语言的介绍是一个非常好的起步教程,把Ruby语言中一些核心点都指了出来。比起我读到过一些Ruby语言教程,...

    ruby教程.rar

    对象 类 执行 结束时的相关处理 线程 安全模型 正则表达式 Ruby的语法 字句构造 程序 变量和常数 字面值 操作符表达式 控制结构/异常处理 方法调用 类/方法的定义 标准库 内部函数 内部变量 ...

    Ruby学习笔记

    对象模型比起JavaScript好的不是一点两点,clone关键字真是为原型式编程量身打造的,new就显得不伦不类了,尤其是我从Java开始的。恩,废话就少提,下面我学习Ruby的各个部分。其中Ruby风格这一部分是开放的,因为我...

    Ruby-Reform能够给你一个Form对象模型包含验证和嵌套设置

    Reform - 能够给你一个Form对象模型包含验证和嵌套设置,框架和数据库无关。

    在Ruby(和Rails)中部署机器学习模型-Ruby开发

    在Ruby(和Rails)中部署机器学习模型Trove:fire:在Ruby(和Rails)中部署机器学习模型与XGBoost,Torch.rb,fastText和许多其他gems配合使用非常好。将这一行添加到应用程序的Gemfile中:gem'trove'并运行:bundle ...

    C#操作Word(word对象模型)

    本文详细介绍了Word对象模型以及如何使用C#开发关于Word的应用程序

    Ruby高级编程教程-世界顶级高校教材(完整版827页)

    在这里,我们讨论类和对象、类型、表达式以及构成语言的所有其他东西。我们以单元测试和在出现问题时挖掘自己的章节结束。 Ruby的一大优点是它与环境的集成度很高。 第二部分,Ruby在其环境中,对此进行了研究。在...

    Ruby on Rails Web开发之旅.pdf【第二部分】

     3.3.2 与Ruby对象交互  3.3.3 Ruby中的标点  3.4 在Ruby中使用面向对象编程  3.4.1 类和对象  3.4.2 对象层功能  3.4.3 类层功能  3.4.4 继承  3.4.5 返回值  3.5 标准输出  3.6 Ruby核心类  ...

    Ruby on Rails Web开发之旅.pdf【第一部分】

     3.3.2 与Ruby对象交互  3.3.3 Ruby中的标点  3.4 在Ruby中使用面向对象编程  3.4.1 类和对象  3.4.2 对象层功能  3.4.3 类层功能  3.4.4 继承  3.4.5 返回值  3.5 标准输出  3.6 Ruby核心类  ...

    Ruby on Rails Web开发之旅.pdf【第三部分】

     3.3.2 与Ruby对象交互  3.3.3 Ruby中的标点  3.4 在Ruby中使用面向对象编程  3.4.1 类和对象  3.4.2 对象层功能  3.4.3 类层功能  3.4.4 继承  3.4.5 返回值  3.5 标准输出  3.6 Ruby核心类  ...

    Selenium-Ruby-Template:具有页面对象模型的Selenium Ruby单元测试模板

    具有页面对象模型的Selenium Ruby单元测试模板 要在运行时自动执行二进制文件管理,请使用 ,这是的优秀库 如何使用? 在lib / pageobjects包下创建Web应用程序的Page Objects,在测试包下的测试中调用这些Page ...

    JSON对象展示生成模板boxer-ruby.zip

    boxer 是一款简单的用户自定义模板,用来生成 JSON 对象模型表示。 标签:boxer

    Ruby 编程语言的书籍

    这本书涵盖了 Ruby 的基础知识和高级特性,包括对象模型、控制流、模块和类、异常处理、元编程等方面的内容。它适合初学者入门,同时也提供了一些进阶的话题,能够帮助读者系统地学习和掌握 Ruby 编程语言。

    nihilist:Nigilist Ruby gem —应用程序中用户模型的空对象

    它允许 null 对象为所有问题方法返回false ,为所有非 bang 方法返回nil为所有复数形式的方法(以及在 Ruby on Rails 中为同名 ActiveRecord 模型提供空关系)返回[] ,而无需定义它们。 安装 gem install nigilist...

    dm-validations:用于对 DM 模型和纯 Ruby 对象执行验证的库

    这是一个 DataMapper 插件,为 DataMapper 模型类提供验证。 安装 当您在应用程序中需要 dm-validations' 时,DataMapper 验证功能可自动用于 DataMapper 资源。 无需手动包含任何内容,一旦需要此 gem,每个 ...

    C#操作Excel(Excel对象模型)_v1.0

    Excel对象模型中文版。若要使用C#语言进行Excel操作,必须首先了解Excel的对象模型。本文用很多实例代码详细的介绍了Excel的对象模型

    java面向对象笔试题-ddd_sample_app_ruby:DDD示例应用程序的惯用Ruby端口

    java一个对象笔试题 Ruby DDD 示例应用程序 目标 此示例应用程序的目标是提供 DDD 示例应用程序的惯用 Ruby 端口。 它应该忠实于原始 DDD 示例应用程序的目的。 为什么是 Ruby 端口? 因为 Paul 想学习 Ruby,看看它...

    roodi:Ruby面向对象设计推理仪

    鲁迪 描述 Roodi代表Ruby Object Oriented Design Inferometer。 它解析您的Ruby代码,并基于已配置的检查向您发出有关... 在Rails应用程序中检查一个控制器和一个模型文件: $ roodi app/controller/sample_controll

    Ruby_Framework:使用ruby的自动化框架

    SitePrism 水豚的页面对象模型DSL SitePrism为您提供了一种简单,干净且语义清晰的DSL,用于使用Page Object Model模式描述您的站点,并与Capybara一起用于自动验收测试。 在此处找到漂亮的文档: : 水豚Capybara...

Global site tag (gtag.js) - Google Analytics