在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Module: 模块的定义和类比较相似,使用module关键字。但模块不能被实例化,也不能被子类化,模块是独立的,且一个模块对像是Module类的一个实例。模块最常用的两个用途是作为命空间和混入(mixin)。 在模块中,可以定义实例变量、实例方法、类变量、类方法和属性等,并且在模块中还可能以定义类和模块。在类中也可以定义模块。 在访问模块中的实例成员,需要在类中饱含模块,然后实例化类以访问模块的实例成员。 module FirstModule def go puts "Go home" end
def self.show #or FirstModule.show puts "It's a red car." end end FirstModule.show #It's a red car.
class Car include FirstModule #在类中插入 end car = Car.new car.go #Go home
a)模块内方法调用: module Test def self.function puts “ this is function test” end end 调用:Test.function
module Test2 class TestClass def performance puts “this is performance test” end end end 调用:Test2::TestClass.new.performance
b)模块常量调用 module TestConst PI = 3.14 end 调用:TestConst::PI
c) 模块用于命令空间(Namespace):防止命令冲突,这个就不多说了。 d) 模块用于混入(Mixins): 目的是实现多继承在类中混入模块和从基类继承非常相似,为的实例对像都可以调用实例成员,上面也提到了。在类中可以包含多个模块,但是类却不能继承自多个类。当需要给类的实例添加很多附加功能,且不想把这些功能全部放在基类中时,就可以使用模块来组织代码。
e) 加载和请求模块 i. 有时会把不同的类或模块存放在不同的文件中,在使用这些文件时,就需要使用load和require来加载这些文件。在使用文件中的模块和对象时,还需要使用include和extend方法。 ii. require 和 load的区别:
iii. include方法: 该方法主要用来将一个模块插入(混入)到一个类或者其它模块。在类定义中引入模块,使模块中的方法成为类的实例方法;这个模块的方法在引入它的类或模块中以函数的形式调用,include 并非将模块的实例方法简单 拷贝到类中, 而是建立了一个类到模块的引用。,如; 模块,文件名为:TestModule module Foo def hello puts "This is my first module in Ruby!" end end
另有一个类文件名为:Test #Test类和TestModule模块在同一路径下 #require "D:/cucumber/Ruby/Module" #(加载文件)绝对路径 require “../Ruby/Module" #(加载文件)相对路径
class TestOne include Foo #混入模块 def hi puts "This is a class" end end a=TestOne.new a.hi a.hello
iv. extend方法: extend 用来在一个对象(object,或者说是instance)中引入一个模块,这类从而也具备了这个模块的方法,如: module FirstModule def helloMod puts "This is a module." end end
class FirstClass def helloClass puts "This is a class." end end c=FirstClass.new c.helloClass #This is a class. c.extend(FirstModule) c.helloMod #This is a module.
v. 加载路径: Ruby的加载路径是一个数组,可以使用全局变量$LOAD_PATH 或 $:进行访问。数组的每个元素都是一个目录史,ruby在这些目录中查找加载的文件,前面的目录比后面的目录优选被查找;可以使用 puts $: 输出路径;Ruby程序也可以通过修改$LOAD_PATH($:)数组的内容来修改加载路径;如: puts $: $: << "../.." #修改加载路径的值 puts"@@@@@@@" puts $: 当然,我们可以对load或require使用绝对路径,这样可以完全绕过加载路径; |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论