上篇有个标准的定义动态类变量
class MyClass
class << self
attr_accessor :my_constant
end
def my_method
self.class.my_constant = "blah"
end
end
p MyClass.my_constant #=> nil
MyClass.new.my_method
p MyClass.my_constant #=> "blah"
如果类也动态定义,那么子类和module怎么定义进去的
dynamic_name = "TestEval2"
Object.const_set(dynamic_name, Class.new{def method1() 42 end }})
dummy2 = eval("#{dynamic_name}")
puts "dummy2: #{dummy2}"
dynamic_name = "SubTestEval2"
SubModule.const_set(dynamic_name, Class.new(TestEval2){def method1() 43 end })
dummy3 = eval("#{dynamic_name}")
puts "dummy3: #{dummy3}"
判断动态类是否存在
def class_exists?(class_name)
eval("defined?(#{class_name}) && #{class_name}.is_a?(Class)") == true
end
class_name = "Blorp"
class_exists?(class_name)
=> false
class_name = "String"
class_exists?(class_name)
=> true
define_method定义的方法参数放到哪?
define_method(:say_hi) { |other| puts "Hi, " + other }
分享到:
相关推荐
- **动态性**:Ruby支持运行时修改代码结构,允许开发者在程序运行过程中改变类和方法的行为。 - **元编程能力**:Ruby提供了一种称为元编程的技术,使得程序可以自我修改和自我扩展。 ### 二、Ruby编程基础 #### ...
Ruby是一种动态、面向对象的脚本语言,以其简洁、优雅的语法和强大的元编程能力著称。在这一版中,作者深入浅出地讲解了Ruby 1.9的改进和新特性,旨在帮助开发者更好地理解和利用这个版本的优势。 1. **Ruby 1.9的...
Ruby支持单一继承,子类可以继承父类的所有属性和方法,并且可以覆盖或扩展父类的行为。 ```ruby class Student def study(subject) puts "I am studying #{subject}." end end ``` **3.4 特殊方法与特殊类** ...
在对Ruby进行了简要的综述之后,《Ruby编程语言》详细介绍了以下内容:Ruby的句法和语法结构,数据结构和对象,表达式和操作符,语句和控制结构,方法、proc、lambda和闭包,反射和元编程,Ruby平台。本书还包含对...
Ruby支持类的继承,允许一个类(子类)继承另一个类(父类)的属性和方法。子类使用`符号指定其父类,如下所示: ```ruby class Student def study puts "I'm studying hard!" end end ``` 在这个例子中,`...
Ruby是一种面向对象的脚本语言,它以其简洁、优雅的语法和强大的编程能力而闻名。本教程旨在为初学者提供一个全面的Ruby语言入门指南,帮助他们快速掌握这门语言的基础知识。 首先,Ruby的核心设计理念是“人本主义...
在学习Ruby之前,我们首先需要掌握其基础语法,这包括变量、常量和数据类型的定义及使用,以及运算符和控制流语句。随后,我们将深入面向对象编程,探讨类、对象、继承和多态。了解了基础语法和面向对象编程后,我们...
- **动态方法定义**:Ruby允许在运行时动态定义方法。 - **动态类修改**:可以在运行时修改类的定义,包括添加新方法和属性。 ##### §3.8 变量 - **局部变量**:作用域仅限于定义它的方法内部。 - **实例变量**:...
- **条件语句**:`if` 和 `unless` 是Ruby中的主要条件判断语句。它们可以用来根据不同的条件执行不同的代码块。例如: ```ruby if age >= 18 puts "You are an adult." else puts "You are not yet an adult....
- 继承:通过使用“<”符号定义子类继承父类的属性和方法。 - 封装:通过方法控制对对象内部状态的访问。 - 多态:通过方法重载或动态方法查找实现多态。 7. 高级主题: - 块(blocks)、迭代器和闭包:Ruby块...
- **动态性**:Ruby是一种动态类型语言,可以在运行时修改类和对象的行为。 - **可扩展性**:Ruby可以通过扩展库来增强其功能,这些库通常以C语言编写,以提高性能。 #### 三、Ruby的安装与使用 - **下载与安装**...
2. 类和模块的定义在运行时:同样,类和模块也可以在程序运行过程中动态创建。 3. `eval`函数:可以接收一个字符串作为参数,将其作为Ruby代码执行。 四、Ruby on Rails框架 Ruby on Rails(简称Rails)是Ruby的...
- **动态性**:Ruby是一种动态类型语言,支持运行时修改类和方法。 - **面向对象**:几乎所有的Ruby代码都是对象,包括基本数据类型如整数和字符串。 - **灵活性**:Ruby允许开发者定义自己的语法结构,具有很高的...
Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。本"Ruby学习指南"旨在帮助初学者快速掌握Ruby的基础知识,同时也为有一定经验的开发者提供深入学习的资源。 1. **Ruby...
Ruby中的类还可以继承,通过`操作符定义子类,并可以使用`super`关键字调用父类的方法。 三、控制结构 Ruby提供了多种控制结构,如条件语句(if/else, case)、循环(for, while, until, each)和流程控制语句...
索引功能安装构建用法管理Ruby的虚拟机调用Ruby方法定义Ruby方法定义Ruby类定义Ruby子类捕获Ruby异常平台支持库比较Rosy与Helix Rosy与Rutie作者许可功能性能:Rosy使您可以编写性能最高的代码,因此直接使用C API...
- **动态性**:Ruby支持动态类型和动态方法调用。 - **面向对象**:所有事物都是对象。 - **可扩展性**:Ruby可以通过C语言编写扩展。 #### 二、Ruby的应用领域 - **Web开发**:尤其是通过Ruby on Rails框架。 ...
Ruby中可以通过定义构建步骤和最后组装的方法来实现。 5. **原型模式**:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。Ruby支持对象的克隆,`Object#clone`或`Object#dup`方法可以实现原型...
“==” 使用最频繁,它通常用于对象的值相等性(语义相等)判断,在 Object 的方法定义中,“==” 比较两个对象的 object_id 是否一致,通常子类都会重写覆盖这个方法,通过比较内部值来判断对象是否相等。...
Ruby支持单继承机制,子类可以继承父类的方法和属性。 **3.4 特殊方法与特殊类** - **初始化方法:** `initialize` 方法在创建新对象时自动调用。 - **访问器方法:** `attr_accessor` 用于定义getter和setter方法...