c# 代码
- namespace ConsoleApplication1
- {
- class Test
- {
- public static void Main()
- {
- B b = new B();
- }
- }
-
- class A
- {
- public A()
- {
- Console.WriteLine("A");
- }
- }
-
- class B : A
- {
- public B()
- {
- Console.WriteLine("B");
- }
- }
- }
这段程序的输出结果是
A
B
结果都不陌生,把这段程序用ruby重写
ruby 代码
- class A
- def initialize
- puts "A"
- end
- end
-
- class B < A
- def initialize
- puts "B"
- end
- end
这段程序的输出是B,并非我想像中的
A
B
奇怪么?不奇怪,ruby的类在实例化的时候并不会去主动调用父类中的构造函数,也就是说,父类和子类的关系仅仅在于父类为子类提供一些可使用的方法而已,这些方法实际上放在父类自身的方法表或者父类单例类的方法表中:
ruby 代码
在上面定义的这个类A的方法表中,没有保存任何方法,它所有的通过A.methods看到的方法,都是通过爬继承树得来的。当收到一个方法调用的消息时,ruby类首先会查找自己的方法表,若方法表中没有,就会沿着继承树向上爬,去祖宗类中去找,所以,当我们调用A.new的时候,就会沿着继承关系到Object,Kernel等里面去找这个new方法和initialize方法,在之前B继承A的例子中就可以看到,因为B本身的方法表中已经具有了initialize这个方法,new调用就不会去爬继承树找A中的initialize方法。
分享到:
相关推荐
模块在Ruby中用于封装相关的类和方法,也可以实现类的多重继承。模块通过`module`关键字定义,使用`include`或`extend`导入到其他类或对象中: ```ruby module MathOperations def add(a, b) a + b end end ...
这个Ruby脚本的目的是从iOS项目中提取出类的继承关系,并以JSON格式导出结果文件。利用这个脚本,我们可以便捷地分析一个iOS项目的类结构。 脚本的工作原理是遍历iOS项目中的所有Swift文件,通过解析语法树来找出类...
用 Ruby 写的脚本,可以提取 iOS 项目中的类继承关系。 用法: ruby class_hierarchy.rb path_to_iOS_project 抽取出的类关系会在 Ruby 脚本的当前执行目录下生成 Extracted 文件夹,里面是 JSON 格式的结果文件。...
当多个类公用很多方法的时候可以将公用方法部分抽取出来,需要的类做相关继承。 例子: 代码如下: class A ”it was a “ C.new.a #=>”it was a “ 2、抽象类 当多个类要继承一个类时,用第一种方法,会遇到一个...
模块可以包含方法和常量,可以通过`include`关键字将模块的方法引入到类中。 Ruby的标准库非常丰富,提供了许多内置的模块和类,如File用于文件操作,Array和Hash提供数据结构支持,Net模块用于网络编程,如HTTP...
在Ruby中,API主要体现在类、方法、模块和库的形式上,它们提供了丰富的功能供开发者使用。Ruby的官方API文档详细记录了每种内置类型、类、模块、方法以及它们的使用方式。"ruby中英文api"资料集可能包含了对这些...
Ruby还支持模块(Module),可以用来组织代码和实现多继承的效果。此外,Ruby的块(Block)和 Proc 对象让函数式编程变得简单,例如使用`each`方法遍历数组: ```ruby fruits = ["Apple", "Banana", "Cherry"] ...
在Ruby中,异常类是继承自`StandardError`的,你可以自定义异常类来处理特定类型的错误。 Ruby on Rails是Ruby最著名的Web开发框架,它遵循MVC(模型-视图-控制器)架构模式。这份文档可能也涵盖了Rails的相关内容...
文档中将详细讲解Ruby的基础语法,如变量声明、控制结构(条件语句、循环)、函数和方法定义等。 Ruby的面向对象特性体现在类和对象的概念上。通过定义类,你可以创建具有特定属性和行为的对象。Ruby支持单继承,但...
Ruby元编程是Ruby编程语言中的一个重要特色,它指的是Ruby语言允许程序员在运行时对类、方法和变量等进行操作的能力。通过元编程,开发者可以编写出更加简洁、灵活和高效的代码。《Metaprogramming Ruby》这本书深入...
在Ruby编程语言中,继承是面向对象编程的一个关键特性,它允许子类继承父类的属性和方法。然而,不恰当的使用继承可能会导致代码重复和维护困难。本篇文章将探讨如何优化Ruby中的继承类实例,以提高代码的可读性和...
你可以定义方法,创建继承结构,使用模块(module)来实现代码复用和类别混合(mixin),以及利用元编程能力动态地修改类的行为。Ruby的块(block)、 Proc 和 Lambda 是实现回调和高阶函数的关键。 元编程是Ruby的...
用户指南通常会从基础开始介绍Ruby,包括变量、数据类型、控制结构(如if语句、循环)、函数、类与对象、模块、继承等。此外,还会涉及异常处理、文件操作、正则表达式和字符串处理等内容,这些都是Ruby编程的基础...
- 函数与方法:Ruby中的函数被称为方法,可以定义在类或模块中,支持块(block)和 Proc 对象。 2. **面向对象编程(OOP)** - 类与对象:Ruby是纯面向对象的语言,一切皆对象。你可以创建自定义类来封装数据和...
在这个例子中,`Student`类继承了`Person`类,并添加了一个新的实例变量`@grade`以及一个新的方法`study`。`super`方法用于调用父类的`initialize`方法。 #### 总结 通过以上介绍,我们可以看到Ruby作为一种纯粹的...
Ruby中的类和模块是构建对象的基础,类用于定义对象的结构和行为,模块则用于组织代码和实现多继承。 3. **方法**:Ruby的方法可以看作是对象的行为,可以定义在类、模块或者对象上。方法调用可以用点操作符(`.`)...
多态性在Ruby中通过消息传递实现,即对象调用方法,如果该方法不存在,会尝试在父类中查找。 Ruby中的控制结构包括条件语句(如`if`、`unless`)、循环(如`for`、`while`、`until`、`times`)和块(用`do..end`或`...
总的来说,Ruby 中的装饰器模式是一种强大的设计模式,它允许我们在运行时动态地改变对象的行为,增加了代码的灵活性和可扩展性,同时避免了因频繁继承而导致的类爆炸问题。在面向对象编程中,尤其是在需要扩展已有...
3. **方法**:Ruby中的方法是实现功能的代码块,可以有参数,也可以返回值。文档会介绍如何定义、调用方法,以及块(block)和 Proc 对象。 4. **异常处理**:Ruby提供了异常处理机制,通过`begin-rescue-end`块来...
类变量在Ruby中以`@@`前缀表示,它们是属于类或模块的共享变量,不会被类的实例所继承。这意味着,所有的类实例都可以访问同一个类变量,但它们之间不会互相影响。例如: ```ruby class MyClass @@class_var = ...