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方法。

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

  • 相关阅读:
    java performance
    C# and Java: Comparing Programming Languages
    MYSQL blogs and articles
    网络基本功系列:细说网络那些事儿
    Spark 优化器 ML的论文
    逻辑回归
    MapReduce
    Spark
    Set-Theory-and-Logic
    k-means
  • 原文地址:https://www.cnblogs.com/yank/p/1659254.html
Copyright © 2011-2022 走看看