zoukankan      html  css  js  c++  java
  • Ruby的部分类

    1 class Person
    2 def hello
    3 puts "Hello!"
    4 end
    5 end
    6
    7  class Person
    8 def goodbye
    9 puts "Goodbye!"
    10 end
    11 end
    12
    13  #测试
    14  p1 = Person.new
    15 p1.hello # Hello!
    16 p1.goodbye # Goodbye!

    这个代码也许大家都见过,如果是从高级语言转攻ruby的,可能很奇怪,这样能运行吗?在高级语言中,拿C#举例,这样的代码显然不能运行。

    但是这就是Ruby中的部分类的实现。不用借助其他即可实现部分类。而C#中部分类的实现却要借助partial关键字来实现。如下:

    1 public partial class Person
    2 {
    3 public void hello(){}
    4 }
    5
    6 public partial class Person
    7 {
    8 public void goodbye(){}
    9 }

    部分类的优点:

    1、你可以将部分类写在一个文件或者多个文件中,对类进行扩展。

    2、可以重写类的方法

    module,也具有此种特性

    1 #module扩展
    2 module Travel
    3 def forward
    4 puts "Forward"
    5 end
    6 end
    7
    8 module Travel
    9 def backward
    10 puts "Backward"
    11 end
    12 end
    13
    14 puts Travel.instance_methods # backward forward

    注意:

    Ruby的部分类与C#的部分类还有一些差别。

    如果是高级语言,编译器会将这几个文件组合起来一起编译。无论在哪里,调用的这个都是同一个类(几个文件组合到一起,编译成的)。

    而Ruby是脚本语言,是解释执行的。执行一个部分类,这个部分类的方法就被加载进去,一些还没有执行的,在这里它的方法还不能够直接调用。就想开始的例子,

    当程序运行至第一个Person class 结束时,Person类只有hello方法,只有在执行完第二个Person class,Person类才有了goodbye方法。

    在我们使用的过程一定要注意这一点,通常会将部分类放到配置文件中,在程序执行时就全部加载。

  • 相关阅读:
    idea actiBPM插件之中文乱码
    quartz 集成到Spring中
    Spring 中将service 注入到普通的工具类中
    idea 将java 项目 打包成jar包
    异常来自 HRESULT:0x80070057 (E_INVALIDARG))
    Entity Framework小知识
    C# Unix时间戳转换
    Asp.NET MVC+WebAPI跨域调用
    位运算逻辑与逻辑或逻辑非运算 c# 中如何使用
    c# 学习笔记 重载、重写、重构、构造函数、new、Class
  • 原文地址:https://www.cnblogs.com/yank/p/1659254.html
Copyright © 2011-2022 走看看