特殊方法是指某实例所特有的方法。一个对象有哪些行为由对向所属的类决定,但是有时候,一些特殊的对象有何其他对象不一样的行为,在多数程序设计语言中,例如C++和Java,我们必须定义一个新类,但在Ruby中,我们可以定义只从属于某个特定对象的方法,这种方法我们成为特殊方法(Singleton Method)。
class SingletonTest
def info
puts "This is This is SingletonTest method"
end
end
obj1 = SingletonTest.new
obj2 = SingletonTest.new
def obj2.info
puts "This is obj2"
end
obj1.info
obj2.info
执行结果为:
This is This is SingletonTest method
This is obj2
有时候,我们需要给一个对象定义一系列的特殊方法,如果按照前面的方法,那么只能一个一个定义:
def obj2.singleton_method1
end
def obj2.singleton_method2
end
def obj2.singleton_method3
end
……
def obj2.singleton_methodn
end
这样做非常繁复麻烦,而且无法给出一个统一的概念模型,因此Ruby提供了另外一种方法,
class << obj
……
end
obj是一个具体的对象实例,class << 代表它的特殊类。
class SingletonTest
def meth1
puts "This is meth1"
end
def meth2
puts "This is meth2"
end
end
obj1 = SingletonTest.new
obj2 = SingletonTest.new
class << obj2
def meth1
puts "This is obj2's meth1"
end
def meth2
puts "This is obj2's meth2"
end
end
obj1.meth1
obj1.meth2
obj2.meth1
obj2.meth2
执行结果为:
This is meth1
This is meth2
This is obj2's meth1
This is obj2's meth2
分享到:
相关推荐
标题提到的“Ruby-Functo”就是Ruby中实现可组合方法对象的一个库,它为开发者提供了更灵活和模块化的代码组织方式。 Functo库的设计理念是让函数或方法像对象一样可以被操作、组合和复用。在传统的面向对象编程中...
Ruby还支持块(Blocks),这是一种特殊的匿名方法,通常用`do..end`或花括号`{..}`包裹。块可以与方法结合使用,如`each`迭代器方法: ```ruby [1, 2, 3].each do |num| puts num end ``` ### 类(Classes) 类是...
- **`initialize`方法**:这是一个特殊的构造函数,用来初始化对象的状态。在创建对象时,会自动调用这个方法。 ```ruby class Box def initialize(width, height) @width = width @height = height end end...
4. 特殊方法(Eigenclasses):在Ruby中,每个类都有一个与其相关的单独类,被称为 eigenclass 或 singleton class,也常被称为 metaclass。通过理解 eigenclass 的工作原理,程序员可以实现更高级的元编程技巧,...
`method_missing`是Ruby的一个特殊方法,当调用一个未定义的方法时,系统会自动调用它,允许开发者处理未知的方法调用。 3. **变量**:Ruby的变量可以在运行时被重新定义。全局变量、实例变量和类变量都可以动态...
1. **URL友好的转换**:Stringex提供了`to_url`方法,可以将字符串转换为适合URL的形式,自动处理空格、特殊字符等,并将其转换为连字符或下划线。 2. **日期和时间解析**:通过`to_date`和`to_time`方法,你可以...
类方法在Ruby中是一种特殊的单例方法,它绑定于类而不是类的实例。这意味着,当我们在类的上下文中定义一个方法时,这个方法可以被类本身调用,而不是它的实例。 **定义类方法的方式:** 1. **使用 `def` 关键字...
5. **Proc对象与lambda**:Ruby的`Proc`和`lambda`可以创建匿名函数,它们可以被赋值给变量,作为参数传递,或者用作方法的返回值。 6. **块与yield**:Ruby的块是代码的匿名片段,可以用`yield`来调用。它们是元...
在Ruby中,由于所有东西都是对象,因此可以通过方法调用来实现多态。例如,`+`操作符可以用于整数相加,也可以用于字符串拼接。 #### 二、类的定义 在Ruby中,类是用来定义具有相同属性和行为的对象的模板。类的...
- **服务(Service)**:Hprose 服务是提供远程方法调用的实体,你可以将任何 Ruby 对象注册到服务中,然后其他客户端就可以通过网络调用这些对象的方法。 - **客户端(Client)**:Hprose 客户端负责连接服务端,...
5. **符号(Symbol)**:Ruby引入了一种特殊的不可变对象——符号,用于表示唯一的标识符,节省内存。 6. **GVL(全局解释器锁)**:在Ruby 2.1.0版本中,虽然已经对GVL进行了优化,但仍然存在,这限制了并发执行的...
这为开发者提供了深入学习Ruby和贡献社区的机会,同时也方便了那些需要对Ruby进行特殊配置或优化的场合。 总之,Ruby作为一种强大的脚本语言,以其面向对象的特性、动态类型、元编程能力以及与Watir的结合,成为了...
- 符号是Ruby中的一种特殊数据类型,它们是不可变的,常用于哈希键和方法调用。理解符号与字符串的区别对于优化内存使用至关重要。 3. **块和 Proc/Lambda**: - Ruby中的块(由`do...end`或`{...}`定义)是代码...
方法调用参数也是可选的,这体现了Ruby的灵活性和面向对象的哲学。 - **语句块与迭代器**:Ruby支持简洁的循环语法,如`each`等迭代器,简化了集合操作和循环逻辑的编写。 - **表达式与操作符**:Ruby允许字符串等...
Ruby的类定义使用关键字"class",对象是类的实例,可以通过消息传递来调用方法。Ruby还引入了模块(module)作为命名空间管理和实现多重继承的手段。 Ruby的元编程能力是其独特之处。通过反射API,开发者可以在运行...
- **默认线程安全性**:Ruby标准库中的一些类和方法默认是线程安全的,但并非所有都是。 - **使用互斥锁保护数据**:互斥锁(Mutex)是一种常用的同步机制,用于确保一次只有一个线程访问共享资源。通过在关键操作...
特殊方法是指那些在Ruby中具有特殊含义的方法,例如`initialize`、`==`等。 **3.5 类变量与类方法** 类变量是以`@@`开头的变量,可以在类的所有实例之间共享。类方法则是定义在类本身上的方法。 ```ruby class ...