`

ruby 创建基本的类

    博客分类:
  • ruby
阅读更多
由于ruby的语法很多,看过也难免会忘记,而且能看的时间也不是很多,所以尝试一点一点写进自己的博客里,加深一下印象。
一个基本的类的格式如下:
class Point
    def initialize(x,y)
         @x,@y=x,y
    end
    def x
        @x
    end
    def y
        @y
    end
    def x=(value)
        @x=value
    end
    def y=(value)
        @y=value
    end
    def to_s
        "(#@x,#@y)"
    end
end


这个类的方法调用也很简单:

p=Point.new(1,2)
p.x=3
p.y=4
print p


其实上面那个类还可以定义得更简单:

class Point
    def initialize(x,y)
         @x,@y=x,y
    end
    #attr_accessor :x,:y
    attr_reader :x,:y
    attr_writer :x,:y
    def to_s
        "(#@x,#@y)"
    end
end


其中上面的attr_reader与attr_writer综合一下,就成了注释掉的那行代码attr_accessor。

也可以向Point中添加一些操作方法,如:

...
    def +(other)
      Point.new(@x+other.x,@y+other.y)
    end
..


在ruby中,所有实例变量都隐式使用self,如果要使用self,可以这样使用self.x。从上面的这段代码可以看出,只要other对象具有x,y变量的访问方法即可,并不要求一定要是Point对象,这就是"Duck typing"方式,即只要看来像鸭子,就把它当做鸭子对待。

要覆盖equ也很简单,不过有几种方式,也可以写一个==方法:

   def ==(o)
      if o.is_a?(Point)
        @x==o.x&&@y==o.y
      elsif
          false
      end
    end
    alias eql? ==


其中最后一行代码表示eql当做==处理。

当然ruby也有关键字private、protected、public,这些关键字针对是实例方法:
1.如果没有声明,默认为public
2.initialize方法是private的
3.private方法只能隐式的调用,不能用o.m或self.m来调用
4.private只能被类或其子类的实例方法调用
5.protected除了能被类或其子类的实例方法调用外,可以被类的实例显示的调用,但该类的用户不能访问这些方法。

用法很简单:

    def +(other)
      Point.new(@x+other.x,@y+other.y)
    end
    def -(other)
      Point.new(@x-other.x,@y-other.y)
    end
    private :-,:+
.........


定义类方法也还有点意思,类方法相当java的static方法,定义的方式大致有两种:

....
    def self.sum(*points)
      x=y=0
      points.each{|p| x+=p.x;y+=p.y}
      Point.new(x,y)
    end
...

其中那个self可以用当前的类名代替。还有一种是为了方便定义多个类方法的:

  class << self
    def sum(*points)
      x=y=0
      points.each{|p| x+=p.x;y+=p.y}
      Point.new(x,y)
    end
  end
......

这个相当java来说,其实是差不多的,只是感觉好玩了一点而已。

常量名字需要大写,可以在类内外定义,在内部可以直接访问,在外部必须通过"类名::常量名"的方式访问。如:

...
UNIT_X=Point.new(1,0)
UNIT_Y=Point.new(0,1)
...

Point::UNIT_X+Point::UNIT_Y



相对于java代码来说,的确精简了不少,说实话,写java代码一点优美感都没有,写ruby代码还能稍微感到一点乐趣。
分享到:
评论

相关推荐

    Ruby 方法、类

    创建类的实例(对象)使用`new`方法,如下所示: ```ruby person = Person.new("Alice", 30) person.introduce ``` ### 继承(Inheritance) Ruby支持类的继承,允许一个类(子类)继承另一个类(父类)的属性和...

    纯Ruby创建Win32窗口

    标题“纯Ruby创建Win32窗口”涉及到的是在Windows操作系统环境下,使用Ruby编程语言来创建原生的图形用户界面(GUI)窗口。Ruby是一种面向对象的、动态类型的编程语言,通常用于编写脚本和Web应用,但通过特定的库和...

    Ruby-Ruby的面向对象的枚举

    Ruby的枚举通常指的是枚举类(Enum Class),这是一种自定义枚举类型的方法,允许我们创建具有特定行为的枚举。在本篇文章中,我们将深入探讨Ruby如何实现面向对象的枚举以及它在实际开发中的应用。 首先,让我们...

    ruby程序样例

    Ruby是一种面向对象的脚本...通过分析`example1`和`example3`这样的代码,你可以逐步理解类定义、对象创建、方法调用等核心概念,并逐渐熟悉Ruby的编程风格。实践这些例子,将有助于深化对Ruby的理解,提高编程技能。

    Ruby 语言中类与对象简介,入门级语法介绍

    在这个例子中,`Person`类定义了一个`initialize`方法,这是一个特殊的构造方法,当创建类的新实例时会被自动调用。 #### 三、对象的创建 对象是类的实例,通过调用类的`new`方法来创建。 ```ruby person = ...

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

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

    Ruby编程Ruby Programming

    - **动态性**:Ruby支持运行时修改代码结构,允许开发者在程序运行过程中改变类和方法的行为。 - **元编程能力**:Ruby提供了一种称为元编程的技术,使得程序可以自我修改和自我扩展。 ### 二、Ruby编程基础 #### ...

    Ruby-qtbindings允许你在Ruby中使用QTGui工具包

    通过qtbindings,Ruby程序员可以直接调用QT的类和方法,创建复杂的窗口应用、控件、布局和信号与槽机制,而无需离开熟悉的Ruby环境。 这个项目的核心在于其绑定技术,它将C++的QT库转换为Ruby可以理解和操作的对象...

    Ruby元编程第二版中文

    2. **类与模块操作**:Ruby的`Class.new`和`Module.new`可以用来动态创建类和模块。`class_eval`和`module_eval`允许在类或模块上下文中执行字符串或块作为代码。 3. **对象的反射**:`Object#methods`、`Class#...

    Ruby入门教程中文PDF 附实例

    类和对象是Ruby的核心概念,你可以自定义类并创建实例。例如,创建一个名为`Person`的类并初始化姓名: ```ruby class Person def initialize(name) @name = name end end person = Person.new("Alice") ``` Ruby...

    ruby官方chm文档

    例如,它会详细介绍如何创建和使用类、继承机制、模块混入、块和 Proc 对象,以及符号(Symbol)、字符串(String)、数组(Array)、哈希(Hash)等基本数据类型的使用。核心库的理解对于掌握Ruby语言至关重要。 ...

    ruby基础教程(第四版)第20章 Time类与Date类1

    本章节将详细讲解Ruby中的`Time`类和`Date`类,以及如何进行时间相关的操作。 首先,我们来看`Time`类。`Time`类主要用于处理带有时间戳的时间对象,它可以从系统获取当前时间,比如使用`Time.new`或`Time.now`。...

    Ruby语言入门教程

    这对于创建类之间的关系,尤其是横向关系非常有用。 Ruby的块(Block)和 Proc 对象是其独特功能之一。块是一段可以在函数或方法中传递的代码,通常由`do..end`或花括号`{}`包裹。Proc对象可以捕获一个块并存储起来...

    Programming Ruby

    1. **Ruby语言概述**:Ruby由松本行弘(Yukihiro Matsumoto)创建,设计理念是结合Smalltalk的动态性、Perl的实用性以及Lisp的表达力。Ruby强调代码的可读性和简洁性,其语法清晰,易于理解。 2. **面向对象编程**...

    ruby(前途大好的ruby+rains)

    3. **元编程**:Ruby的元编程能力非常强大,可以使用`class_eval`、`instance_eval`等方法在运行时修改或创建类和对象的行为。 4. **块和 Proc**:Ruby中的块是一段可执行的代码,可以与方法一起使用,通过`do..end...

    Ruby元编程pdf

    Ruby元编程是编程的一种高级技巧,它允许程序员在运行时动态地修改或创建代码,极大地提高了灵活性和代码的可扩展性。Ruby作为一种动态类型语言,其元编程能力尤为强大,使得开发者可以创建出高度定制化的解决方案。...

    ruby中文手册 chm

    通过这个中文手册,开发者不仅可以学习到Ruby的基本语法,还可以了解到更高级的主题,如元编程、闭包、 Blocks、Proc对象和Symbol,以及如何利用Ruby的灵活性来创建高效、简洁的代码。同时,了解RGSS可以让开发者...

Global site tag (gtag.js) - Google Analytics