Ruby定义类方法(即static method)有几种,简单的例子
class Foo
def Foo.dummy1
puts "dummy1"
@name = "dummy1"
@@var = "dummy1"
puts @name
end
def Foo::dummy2
puts "dummy2"
@name = "dummy2"
@@var = "dummy2"
puts @name
end
def self.dummy3
puts "dummy3"
@name = "dummy3"
@@var = "dummy3"
puts @name
end
def putsName
puts @name
puts @@var
end
end
Foo.dummy1
Foo.dummy2
Foo.dummy3
a = Foo.new
#a.dummy1 #NoMethodError
#a.dummy2 #NoMethodError
#a.dummy3 #NoMethodError
a.putsName
值得注意的是,类方法不能在实例里面调用,这个跟C++和Java等有所不同。输出结果是:
dummy1
dummy1
dummy2
dummy2
dummy3
dummy3
dummy3
这里,同样的,实例属性@name的值虽然在类方法里面引用了,但是不会影响到实例a。而类变量@@var的值则被改变了。
分享到:
相关推荐
在Ruby中,方法和类是构建程序的基本元素,它们是实现代码重用和组织的关键概念。 ### 方法(Methods) 方法在Ruby中是可重复使用的代码块,它们接受参数,执行特定任务,并可能返回值。方法定义使用`def`关键字...
方法是类或模块中定义的行为,Referral能找出方法的调用位置和实现,这对于理解代码流程和优化性能至关重要。变量在Ruby中分为局部变量、实例变量、类变量和全局变量,Referral能够追踪它们的使用情况,有助于识别...
#### 定义方法 方法的基本定义结构如下: ```ruby def method_name # 方法体 end ``` 若要定义接受参数的方法,语法稍作调整: ```ruby def method_name(var1, var2) # 方法体 end ``` 还可以为参数设置默认值:...
在传统的面向对象编程中,我们通常会定义类和实例方法来封装逻辑,而在函数式编程中,我们倾向于将函数作为一等公民,这意味着它们可以被赋值给变量、作为参数传递,也可以作为其他函数的返回值。 在Ruby中,Functo...
例如,可以为不同的类定义相同的方法名,它们会根据对象的类型执行不同的操作。 ```ruby class Animal def speak raise "Abstract method" end end class Dog def speak "Woof!" end end class Cat def ...
本文介绍了Ruby中类方法的定义方式以及如何通过类扩展和对象扩展来增强类的功能。这些强大的特性使得Ruby成为了一种非常灵活的语言,能够轻松地扩展类和对象的行为,同时保持代码的清晰和可维护性。理解这些概念对于...
Ruby元编程的核心概念包括类、模块、方法、变量和对象的动态性。以下是对这些概念的详细解释: 1. **类与模块**:在Ruby中,类和模块都是对象。你可以动态地创建和修改它们。例如,你可以通过`Class.new`创建一个新...
Ruby的枚举通常指的是枚举类(Enum Class),这是一种自定义枚举类型的方法,允许我们创建具有特定行为的枚举。在本篇文章中,我们将深入探讨Ruby如何实现面向对象的枚举以及它在实际开发中的应用。 首先,让我们...
- **类方法**:定义类方法时,使用`self`关键字。 **示例**: ```ruby class Foo def self.bar # 类方法实现 end end ``` ##### 方法调用 - **参数括号**:调用方法时,参数同样需用括号括起来,无参数时可省略...
- **属性与方法**:类中的属性用于存储数据,方法则定义对象的行为。 #### 3.2 继承与多态 - **继承**:子类可以从父类继承属性和方法。 - **多态**:不同类的对象可以通过共同接口调用相同的方法,表现出不同的...
在Ruby中,模块(Module)是一种用于组织代码的方式,可以包含常量、方法和类定义。当模块被混入到类中时,其所有方法都变得对那个类及其实例可见。Behaves gem正是利用了这一特性,让开发者能够方便地添加或移除类...
`class 语法常用于在类的上下文中定义方法。 3. **消息发送**:`send`或`__send__`方法可以动态地调用其他方法,这使得你可以根据条件或数据来决定调用哪个方法。 4. **反射API**:Ruby提供了一系列的反射API,如`...
在Ruby语言中,类实例变量、类实例方法与类变量和类方法是构成面向对象编程模型的重要组成部分。它们各自有不同的用途和行为特性,下面详细介绍这些概念的区别以及它们的使用场景。 首先,类实例变量和类实例方法都...
以下是Ruby定义私有方法的两种主要方式: **途径1:先定义方法后声明私有** ```ruby class C def public_method private_method end def private_method puts "This is a private method." end private :...
1. **模型定义**:你可以定义一个Ruby类并继承自`MongoMapper::Document`,然后使用`key`方法声明属性,这类似于ActiveRecord中的`attr_accessor`。例如: ```ruby class User include MongoMapper::Document ...
6. 元类(metaclass)或singleton class:Ruby中的每个类都拥有一个元类,元编程中会使用到这个元类来定义类方法或动态修改类。 7. 打开类(Open Class):在Ruby中,你可以随时打开一个已经定义的类,并给它添加新...
目录散列检索键和值将键映射到值将值映射到键重复的枚举键或重复的值遗产贡献版权和许可相关项目 用法枚举可以定义为常量或类方法来访问,这是优先考虑的问题。 常数定义枚举,并将其作为常量引用。 class ...
书中会讲解类、对象、继承、模块(mixins)以及方法的动态性,这些都是理解Ruby编程的关键。 3. **异常处理**:Ruby中的异常处理机制允许程序在遇到错误时优雅地恢复或终止。书中会介绍如何使用begin/rescue/ensure...