`

Ruby 类

    博客分类:
  • Ruby
 
阅读更多
1. Ruby要建立新的对象,必须使用每个类的new方法。
   例如:
      
        ary = Array.new
        p ary             # => []
       

   与java中new Object()相通,与python不同,python 直接 a = Object()。

2. 想知道对象属于哪个类,可以使用class方法:
   例如:
      
        ary = []
        str = "Hello world."
        p ary.class                      # => Array
        p str.class                      # => String
       

       和python中的__class__类似

3. 要判断一个对象是否是某个类的实例,可以使用instance_of?方法
   例如:
       
         ary = []
         str = "Hello world."
         p ary.instance_of?(Array)        # => true
         p str.instance_of?(String)       # => true
         p ary.instance_of?(String)       # => false
         p str.instance_of?(Array)        # => false
        

        这同python中isinstance功能类似。

4. 检查有继承关系的父类,使用is_a?
   例如:
       
         str = "This is a String"
         p str.is_a?(String)          # => true
         p str.is_a?(Object)          # => true
        


5. 定义类:
  
    class 类名          # 类名一定要以大写字母开始
      类定义
    end
   


6. initialize方法
   initialize方法是一个比较特殊的方法,调用new方法建立对象时,这个initialize方法会被调用;同时,传递给new的所有实参都会传给initialize方法。
   (和python的__init__方法功能类似)

7. 类实例和说明:
   Ruby不允许从对象外部直接读取,写入实例变量。所有要访问对象内部的数据,都需要定义方法来操作。
  
class HelloWorld

  def initialize(myname="Ruby")
    @name = myname
  end

  def name
    return @name            # get
  end

  def name= (value)
    @name = value           # set
  end

end

ruby = HelloWorld.new
p ruby.name         # => "Ruby"
ruby.name = "bob"   
p ruby.name         # => "bob"


class HelloWorld2

  def initialize(myname="Ruby2")
    @name = myname
  end

  attr_reader:name           # 相当与set属性

end

ruby2 = HelloWorld2.new
p ruby2.name                     # => "Ruby2"
ruby2.name = "bob2"              # 8-1-class.rb:35: undefined method `name=' 
                                 # for #<HelloWorld2:0xb77f9100 @name="Ruby2"> (NoMethodError)

p ruby2.name
   

定义访问属性:
定义意义
attr_reader:name只定义用来读取的方法(定义name方法)
attr_writer:name只定义用来写入的方法(定义name=方法)
attr_accessor:name定义用来读取与写入的方法(定义上述两个方法)

  
分享到:
评论

相关推荐

    Ruby-Refrigerator冻结所有核心ruby类

    然而,这种灵活性也意味着在某些情况下,程序可能会无意中修改核心的Ruby类或模块,这可能导致不可预测的行为,尤其是在生产环境中。为了防止这种情况,开发者可以使用特定的工具,如"Ruby-Refrigerator"。 "Ruby-...

    Ruby-FinishingMoves将一些很实用的方法添加至核心Ruby类

    总结来说,`Ruby-FinishingMoves`通过向核心Ruby类添加实用方法,提升了编程体验和代码质量。这些扩展包括但不限于数组、字符串、哈希、日期时间的便捷操作,以及元编程和迭代器的优化。正确使用此类扩展,可以使...

    将Zoho的API抽象为一组Ruby类,使用更熟悉的ActiveRe.zip

    为了解决这个问题,开发者可以创建一个抽象层,将Zoho的API转换为更加友好和易于使用的Ruby类,就像`ActiveRecord`那样。 `ActiveRecord`是Ruby on Rails框架的一个核心组件,它提供了一个ORM(对象关系映射)层,...

    Ruby-Pundit通过OO设计和纯Ruby类可伸缩的授权系统

    Ruby-Pundit是一个强大的授权库,它鼓励使用面向对象的设计原则和纯Ruby类来实现细粒度的权限控制。在Ruby开发中,特别是在构建复杂的Web应用程序时,身份验证和授权是两个关键的安全方面。Pundit的目标是为开发者...

    Ruby语言个人学习小案例分享-Ruby类案例

    Ruby语言个人学习小案例分享-Ruby类案例,适合初学者学习参考,附带源码在里面。

    pundit, 通过面向对象设计和纯 ruby 类进行最小授权.zip

    pundit, 通过面向对象设计和纯 ruby 类进行最小授权 Pundit Pundit提供了一组帮助器,它指导你利用正则 ruby 类和面向对象设计模式构建一个简单。健壮和可以扩展的。链接:API文档源代码 。行为准则。赞助: 安装gem...

    aasm, ruby 类( 普通 ruby,ActiveRecord,Mongoid )的AASM状态机.zip

    aasm, ruby 类( 普通 ruby,ActiveRecord,Mongoid )的AASM状态机 AASM --ruby-状态机 索引从版本升级到 4使用情况回调函数生命周期管理当前事件触发器 。过渡模式每个类的多状态机句柄名称在多个状态机之间冲突。...

    Ruby 方法、类

    在Ruby中,方法和类是构建程序的基本元素,它们是实现代码重用和组织的关键概念。 ### 方法(Methods) 方法在Ruby中是可重复使用的代码块,它们接受参数,执行特定任务,并可能返回值。方法定义使用`def`关键字...

    dry-configurable, 一个简单的mixin使 ruby 类可以配置.zip

    dry-configurable, 一个简单的mixin使 ruby 类可以配置 干可以配置 概要class App extend Dry::Configurable # Pass a block for nested configuration (works to any

    Ruby-Ruby的面向对象的枚举

    在这里,`values` 是Ruby类的实例方法,返回类的所有常量。通过`each` 方法,我们可以轻松地遍历枚举的所有值。 面向对象的枚举还可以包含实例方法,以便提供更复杂的业务逻辑。比如,我们可以定义一个`next_day` ...

    Ruby-MongoMapper针对Mongo的一个Ruby对象映射器

    1. **模型定义**:你可以定义一个Ruby类并继承自`MongoMapper::Document`,然后使用`key`方法声明属性,这类似于ActiveRecord中的`attr_accessor`。例如: ```ruby class User include MongoMapper::Document ...

    Logstash ruby 插件 demo

    1. **创建插件结构**:一个 Logstash 插件通常包含一个 Ruby 类,该类继承自 Logstash 的基础插件类,如 `Logstash::Inputs::Base`、`Logstash::Filters::Base` 或 `Logstash::Outputs::Base`。这些基类提供了事件...

    Ruby-wisper一个微型库为Ruby对象提供发布订阅功能

    然后在Ruby类中包含`Wisper::Publisher`模块,使该类具有广播事件的能力。例如: ```ruby class MyPublisher include Wisper::Publisher def perform_action broadcast(:action_performed) end end ``` ...

    Ruby200

    7. **混合类**(Mixins):Ruby 类可以通过 `include` 关键字混入模块,从而获取模块中的方法,实现了多重继承的效果。 8. **标准库**:Ruby 拥有一个丰富的标准库,包含了各种常用的工具和功能,如文件操作、网络...

    Learn_ruby:从测试优先教学中生成的基本Ruby类

    "Learn_ruby"项目很可能是为了帮助初学者掌握这种实践方式,通过创建基本的Ruby类来学习。下面,我们将深入探讨Ruby类、TDD以及如何在实践中应用它们。 首先,Ruby中的类是面向对象编程的基础,它们定义了对象的...

    Ruby-Scrum扑克游戏

    4. **实现核心功能**:编写Ruby类来实现上述功能。例如,`User`类管理用户信息,`Room`类处理房间逻辑,`Card`类代表不同的斐波那契数值。 5. **交互界面**:可以使用Sinatra或Rails这样的Web框架来创建一个简单的...

    通过OO设计和纯Ruby类进行的最小授权-Ruby开发

    Pundit Pundit提供了一组帮助程序,可以指导您利用常规Ruby类和面向对象的设计模式来构建简单,健壮和可扩展的授权系统。 链接:API文档Sou Pundit Pundit提供了一组帮助程序,可指导您利用常规Ruby类和面向对象的...

    Ruby分解质因数

    通常,这样的文件会包含一个或多个Ruby类或模块,以及分解质因数的函数定义。 总结来说,Ruby中的分解质因数是通过迭代或更高效算法实现的,它在数学、加密和其他计算场景中有广泛应用。了解如何在Ruby中实现这一...

Global site tag (gtag.js) - Google Analytics