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
  • 相关阅读:
    重构29-Remove Middle Man(去掉中间人)
    重构30-Return ASAP(尽快返回)
    重构26-Remove Double Negative(去掉双重否定)
    yaml语法学习3
    运行原理探究2
    SpringBoot简介 1
    SpringMVC项目所引用的一切依赖jar包和自定义设置
    2020/07/03 初始mybatis
    json数据格式字符串在java中的转移
    项目中遇到的一些异常
  • 原文地址:https://www.cnblogs.com/jeriffe/p/2333032.html
Copyright © 2011-2022 走看看