Ruby - 模块

首页 / Ruby / Modules

Module 语法

module Identifier
   statement1
   statement2
   ...........
end

模块常量的命名与类常量一样,并带有大写字母开头。方法定义也看起来相似:模块方法的定义就像类方法一样。

与类方法一样,您可以通过在模块名称前加上模块名称和句点来调用模块方法,并使用模块名称和两个冒号::来引用常量。

#!/usr/bin/ruby

# Module defined in trig.rb file

module Trig
   PI=3.141592654
   def Trig.sin(x)
   # ..
   end
   def Trig.cos(x)
   # ..
   end
end

无涯教程可以再定义一个具有相同函数名称但函数不同的模块-

#!/usr/bin/ruby

# Module defined in moral.rb file

module Moral
   VERY_BAD=0
   BAD=1
   def Moral.sin(badness)
   # ...
   end
end

与类方法一样,每当在模块中定义方法时,都需要指定模块名称,后跟一个点,然后指定方法名称。

Require 语句

Require语句类似于C和C++的include语句以及Java的import语句。如果第三个程序想要使用任何已定义的模块,则可以使用Ruby require 语句简单地加载模块文件-

require filename

在这里,不需要给出 .rb 扩展名以及文件名。

$LOAD_PATH << '.'

require 'trig.rb'
require 'moral'

y=Trig.sin(Trig::PI/4)
wrongdoing=Moral.sin(Moral::VERY_BAD)

include 声明

您可以将模块嵌入类中。要将模块嵌入类中,请在类中使用 include 语句-

include modulename

如果模块是在单独的文件中定义的,则在将模块嵌入类之前,需要使用 require 语句包括该文件。

考虑以下用 support.rb 文件编写的模块。

链接:https://www.learnfk.comhttps://www.learnfk.com/ruby/ruby-modules.html

来源:LearnFk无涯教程网

module Week
   FIRST_DAY="Sunday"
   def Week.weeks_in_month
      puts "You have four weeks in a month"
   end
   def Week.weeks_in_year
      puts "You have 52 weeks in a year"
   end
end

现在,您可以将该模块包含在类中,如下所示:

#!/usr/bin/ruby
$LOAD_PATH << '.'
require "support"

class Decade
include Week
   no_of_yrs=10
   def no_of_months
      puts Week::FIRST_DAY
      number=10*12
      puts number
   end
end
d1=Decade.new
puts Week::FIRST_DAY
Week.weeks_in_month
Week.weeks_in_year
d1.no_of_months

这将产生以下输出-

Sunday
You have four weeks in a month
You have 52 weeks in a year
Sunday
120

Mixin混合

Ruby不直接支持多重继承,但是Ruby Modules还有另一个很好的用法。它提供了名为 mixin 的函数,几乎消除了对多重继承的问题。

Mixins为您提供了一种极好的受控方式,可以为类添加函数。但是,当mixin中的代码开始与使用它的类中的代码进行交互时,它们的真正力量才显现出来。

让无涯教程检查以下示例代码以了解mixin-

module A
   def a1
   end
   def a2
   end
end
module B
   def b1
   end
   def b2
   end
end

class Sample
include A
include B
   def s1
   end
end

samp=Sample.new
samp.a1
samp.a2
samp.b1
samp.b2
samp.s1

模块A由方法a1和a2组成。模块B由方法b1和b2组成。 Sample类包括模块A和B。Sample类可以访问所有四个方法,即a1,a2,b1和b2。因此,您可以看到类Sample继承自两个模块。因此,您可以说Sample类显示了多重继承或 mixin

这一章《Ruby - 模块》你学到了什么?在下面做个笔记吧!做站不易,你的分享是对我们最大的支持,感谢!😊

相关文章

Nginx核心知识100讲 -〔陶辉 - 155讲〕

ZooKeeper实战与源码剖析 -〔么敬国 - 47讲〕

手机摄影 -〔@随你们去 - 16讲〕

手把手带你写一个Web框架 -〔叶剑峰 - 41讲〕

如何在 Mac OS Sierra 10.12 上安装 Nokogiri

jekyll 调试或打印所有变量

找不到Bundle 命令 mac

使用哈希默认值时出现奇怪的意外行为(消失/更改值),例如Hash.ne...

rbenv install --list 不列出 2.1.2 版本

如何使用 Capybara 在下拉菜单中选择选项

视频推荐〔Ruby - 字符串也运算〕

更多视频 »
好记忆不如烂笔头。留下你的足迹吧 :)