zoukankan      html  css  js  c++  java
  • Ruby的module(模块)

    定义模块用module...end 。模块与类非常相似,但是:
        模块不可以有实例对象;
        模块不可以有子类。
    #Module(模块)
    module Module1
      def sqrt(num, rx=1, e=1e-10)
        num*=1.0
        (num - rx*rx).abs <e ? rx : sqrt(num, (num/rx + rx)/2, e)
      end
    end

    puts "Module demo:"
    include Module1
    puts sqrt(45670.01#21.3541565188558
    #Module(模块)方法;模块方法提供了一个途径,在模块的外部访问模块内部方法,无须 include 模块。定义模块常量不需要如此。
    module Module2
      def Module2.sayHello(*num)
        "Welcome to Ruby world."
      end
      PI=3.14
    end
    puts "Module method:"
    puts Module2.sayHello
    puts Module2::PI #3.14
    puts Math::PI #3.141592653589793
    #模块的第三个作用:实现了类似多重继承的功能
    puts "multiple inheritance:"
    class Person
      def talk
        puts "I'm talking."
      end
      #通过"include 模块名 " ,一个类可以得到某个模块的常量和方法,这里为了演示多继承,我们把其放到子类
      #include Module1

    end
    =begin
      person=Person.new
      person.talk   # I'm talking.
      puts person.sqrt(20.7,3.3# 4.54972526643248
    =end
    class Student < Person
      #通过"include 模块名 " ,一个类可以得到某个模块的常量和方法
      include Module1
    end

    aStudent=Student.new
    aStudent.talk # I'm talking.
    puts aStudent.sqrt(20.7,3.3# 4.54972526643248
    #extend:给特定对象实例添加Module
    class StudentEx 
    end
    stuEx=StudentEx.new

    stuEx.extend(Module1)
    puts stuEx.sqrt(20.7,3.3# 4.54972526643248
  • 相关阅读:
    Android:TabHost导航栏
    java:StringUtil工具类
    Android进阶篇MediaPlayer
    Android:图片滚轮
    Android:EditText焦点触发布局隐藏以及显示
    Android:Spinner的使用
    ASP.NET编程模型的理解
    ASP.NET页面事件(页面生命周期)
    根据用户喜欢的爱好选择不同风格CSS(ViewState)
    ASP.NET的页面指令
  • 原文地址:https://www.cnblogs.com/jeriffe/p/2333032.html
Copyright © 2011-2022 走看看