`

动态定义ruby子类,和判断是否定义

阅读更多
上篇有个标准的定义动态类变量
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 Programming

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

    Programming Ruby 1.9 (3rd edition)和源码

    Ruby是一种动态、面向对象的脚本语言,以其简洁、优雅的语法和强大的元编程能力著称。在这一版中,作者深入浅出地讲解了Ruby 1.9的改进和新特性,旨在帮助开发者更好地理解和利用这个版本的优势。 1. **Ruby 1.9的...

    ruby初学者教程(对初学者很有帮助)

    Ruby支持单一继承,子类可以继承父类的所有属性和方法,并且可以覆盖或扩展父类的行为。 ```ruby class Student def study(subject) puts "I am studying #{subject}." end end ``` **3.4 特殊方法与特殊类** ...

    Ruby编程语言

    在对Ruby进行了简要的综述之后,《Ruby编程语言》详细介绍了以下内容:Ruby的句法和语法结构,数据结构和对象,表达式和操作符,语句和控制结构,方法、proc、lambda和闭包,反射和元编程,Ruby平台。本书还包含对...

    Ruby 方法、类

    Ruby支持类的继承,允许一个类(子类)继承另一个类(父类)的属性和方法。子类使用`符号指定其父类,如下所示: ```ruby class Student def study puts "I'm studying hard!" end end ``` 在这个例子中,`...

    Ruby语言入门教程

    Ruby是一种面向对象的脚本语言,它以其简洁、优雅的语法和强大的编程能力而闻名。本教程旨在为初学者提供一个全面的Ruby语言入门指南,帮助他们快速掌握这门语言的基础知识。 首先,Ruby的核心设计理念是“人本主义...

    Ruby的教程.txt

    在学习Ruby之前,我们首先需要掌握其基础语法,这包括变量、常量和数据类型的定义及使用,以及运算符和控制流语句。随后,我们将深入面向对象编程,探讨类、对象、继承和多态。了解了基础语法和面向对象编程后,我们...

    ruby 程序设计

    - **动态方法定义**:Ruby允许在运行时动态定义方法。 - **动态类修改**:可以在运行时修改类的定义,包括添加新方法和属性。 ##### §3.8 变量 - **局部变量**:作用域仅限于定义它的方法内部。 - **实例变量**:...

    Ruby语言教程和经典案例

    - **条件语句**:`if` 和 `unless` 是Ruby中的主要条件判断语句。它们可以用来根据不同的条件执行不同的代码块。例如: ```ruby if age &gt;= 18 puts "You are an adult." else puts "You are not yet an adult....

    Beginning Ruby

    - 继承:通过使用“&lt;”符号定义子类继承父类的属性和方法。 - 封装:通过方法控制对对象内部状态的访问。 - 多态:通过方法重载或动态方法查找实现多态。 7. 高级主题: - 块(blocks)、迭代器和闭包:Ruby块...

    ruby 中文 教程 从入门到精通

    - **动态性**:Ruby是一种动态类型语言,可以在运行时修改类和对象的行为。 - **可扩展性**:Ruby可以通过扩展库来增强其功能,这些库通常以C语言编写,以提高性能。 #### 三、Ruby的安装与使用 - **下载与安装**...

    有关Ruby入门文章

    2. 类和模块的定义在运行时:同样,类和模块也可以在程序运行过程中动态创建。 3. `eval`函数:可以接收一个字符串作为参数,将其作为Ruby代码执行。 四、Ruby on Rails框架 Ruby on Rails(简称Rails)是Ruby的...

    ruby笔记3ruby笔记3ruby笔记3

    Ruby的继承机制允许子类继承父类的属性和方法,增强了代码的重用性。 在Ruby中,模块(Module)用于封装代码,提供命名空间,防止命名冲突,并且可以实现多重继承的效果。模块通过`module`关键字定义,可以使用`...

    为什么是(Poignant)Ruby指南Why's (Poignant) Guide to Ruby

    - **动态性**:Ruby是一种动态类型语言,支持运行时修改类和方法。 - **面向对象**:几乎所有的Ruby代码都是对象,包括基本数据类型如整数和字符串。 - **灵活性**:Ruby允许开发者定义自己的语法结构,具有很高的...

    Ruby 学习指南.rar

    Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。本"Ruby学习指南"旨在帮助初学者快速掌握Ruby的基础知识,同时也为有一定经验的开发者提供深入学习的资源。 1. **Ruby...

    Ruby语言中文教程

    Ruby中的类还可以继承,通过`操作符定义子类,并可以使用`super`关键字调用父类的方法。 三、控制结构 Ruby提供了多种控制结构,如条件语句(if/else, case)、循环(for, while, until, each)和流程控制语句...

    sys rosy-Rust的Ruby绑定-Rust开发

    索引功能安装构建用法管理Ruby的虚拟机调用Ruby方法定义Ruby方法定义Ruby类定义Ruby子类捕获Ruby异常平台支持库比较Rosy与Helix Rosy与Rutie作者许可功能性能:Rosy使您可以编写性能最高的代码,因此直接使用C API...

    Ruby语言教程.docx

    - **动态性**:Ruby支持动态类型和动态方法调用。 - **面向对象**:所有事物都是对象。 - **可扩展性**:Ruby可以通过C语言编写扩展。 #### 二、Ruby的应用领域 - **Web开发**:尤其是通过Ruby on Rails框架。 ...

    Ruby-Ruby中的GoF设计模式实现

    Ruby中可以通过定义构建步骤和最后组装的方法来实现。 5. **原型模式**:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。Ruby支持对象的克隆,`Object#clone`或`Object#dup`方法可以实现原型...

    Ruby中相等性判断的4种方法

    “==” 使用最频繁,它通常用于对象的值相等性(语义相等)判断,在 Object 的方法定义中,“==” 比较两个对象的 object_id 是否一致,通常子类都会重写覆盖这个方法,通过比较内部值来判断对象是否相等。...

Global site tag (gtag.js) - Google Analytics