由于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代码还能稍微感到一点乐趣。
分享到:
相关推荐
创建类的实例(对象)使用`new`方法,如下所示: ```ruby person = Person.new("Alice", 30) person.introduce ``` ### 继承(Inheritance) Ruby支持类的继承,允许一个类(子类)继承另一个类(父类)的属性和...
标题“纯Ruby创建Win32窗口”涉及到的是在Windows操作系统环境下,使用Ruby编程语言来创建原生的图形用户界面(GUI)窗口。Ruby是一种面向对象的、动态类型的编程语言,通常用于编写脚本和Web应用,但通过特定的库和...
Ruby的枚举通常指的是枚举类(Enum Class),这是一种自定义枚举类型的方法,允许我们创建具有特定行为的枚举。在本篇文章中,我们将深入探讨Ruby如何实现面向对象的枚举以及它在实际开发中的应用。 首先,让我们...
Ruby是一种面向对象的脚本...通过分析`example1`和`example3`这样的代码,你可以逐步理解类定义、对象创建、方法调用等核心概念,并逐渐熟悉Ruby的编程风格。实践这些例子,将有助于深化对Ruby的理解,提高编程技能。
在这个例子中,`Person`类定义了一个`initialize`方法,这是一个特殊的构造方法,当创建类的新实例时会被自动调用。 #### 三、对象的创建 对象是类的实例,通过调用类的`new`方法来创建。 ```ruby person = ...
1. **模型定义**:你可以定义一个Ruby类并继承自`MongoMapper::Document`,然后使用`key`方法声明属性,这类似于ActiveRecord中的`attr_accessor`。例如: ```ruby class User include MongoMapper::Document ...
- **动态性**:Ruby支持运行时修改代码结构,允许开发者在程序运行过程中改变类和方法的行为。 - **元编程能力**:Ruby提供了一种称为元编程的技术,使得程序可以自我修改和自我扩展。 ### 二、Ruby编程基础 #### ...
通过qtbindings,Ruby程序员可以直接调用QT的类和方法,创建复杂的窗口应用、控件、布局和信号与槽机制,而无需离开熟悉的Ruby环境。 这个项目的核心在于其绑定技术,它将C++的QT库转换为Ruby可以理解和操作的对象...
2. **类与模块操作**:Ruby的`Class.new`和`Module.new`可以用来动态创建类和模块。`class_eval`和`module_eval`允许在类或模块上下文中执行字符串或块作为代码。 3. **对象的反射**:`Object#methods`、`Class#...
类和对象是Ruby的核心概念,你可以自定义类并创建实例。例如,创建一个名为`Person`的类并初始化姓名: ```ruby class Person def initialize(name) @name = name end end person = Person.new("Alice") ``` Ruby...
例如,它会详细介绍如何创建和使用类、继承机制、模块混入、块和 Proc 对象,以及符号(Symbol)、字符串(String)、数组(Array)、哈希(Hash)等基本数据类型的使用。核心库的理解对于掌握Ruby语言至关重要。 ...
本章节将详细讲解Ruby中的`Time`类和`Date`类,以及如何进行时间相关的操作。 首先,我们来看`Time`类。`Time`类主要用于处理带有时间戳的时间对象,它可以从系统获取当前时间,比如使用`Time.new`或`Time.now`。...
这对于创建类之间的关系,尤其是横向关系非常有用。 Ruby的块(Block)和 Proc 对象是其独特功能之一。块是一段可以在函数或方法中传递的代码,通常由`do..end`或花括号`{}`包裹。Proc对象可以捕获一个块并存储起来...
1. **Ruby语言概述**:Ruby由松本行弘(Yukihiro Matsumoto)创建,设计理念是结合Smalltalk的动态性、Perl的实用性以及Lisp的表达力。Ruby强调代码的可读性和简洁性,其语法清晰,易于理解。 2. **面向对象编程**...
3. **元编程**:Ruby的元编程能力非常强大,可以使用`class_eval`、`instance_eval`等方法在运行时修改或创建类和对象的行为。 4. **块和 Proc**:Ruby中的块是一段可执行的代码,可以与方法一起使用,通过`do..end...
Ruby元编程是编程的一种高级技巧,它允许程序员在运行时动态地修改或创建代码,极大地提高了灵活性和代码的可扩展性。Ruby作为一种动态类型语言,其元编程能力尤为强大,使得开发者可以创建出高度定制化的解决方案。...
通过这个中文手册,开发者不仅可以学习到Ruby的基本语法,还可以了解到更高级的主题,如元编程、闭包、 Blocks、Proc对象和Symbol,以及如何利用Ruby的灵活性来创建高效、简洁的代码。同时,了解RGSS可以让开发者...