首页 > 编程语言 >无涯教程-Ruby - 模块语句

无涯教程-Ruby - 模块语句

时间:2023-11-19 21:32:03浏览次数:119  
标签:语句 教程 end 无涯 模块 weeks include Ruby def

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 文件编写的模块。

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 。

参考链接

https://www.learnfk.com/ruby/ruby-modules.html

标签:语句,教程,end,无涯,模块,weeks,include,Ruby,def
From: https://blog.51cto.com/u_14033984/8475727

相关文章

  • 无涯教程-Ruby - 变量声明
    变量是存储位置,用于保存任何程序要使用的任何数据,Ruby支持五种类型的变量,本章介绍了这五种变量。Ruby全局变量全局变量以"$"开头。未初始化的全局变量的值为nil并使用-w选项生成警告。分配给全局变量会更改全局状态,不建议使用全局变量,它们使程序变得很难维护,下面是全局变量......
  • 无涯教程-Ruby - Blocks块
    您已经了解了Ruby是如何定义方法的,可以在其中放置大量语句,然后调用该方法。同样,Ruby也具有Block的概念。Block语法block_name{statement1statement2..........}在这里,您将学习使用简单的yield语句来调用块。您还将学习使用带参数的yield语句来调用块。Yie......
  • 无涯教程-Ruby - 方法声明
    Ruby方法与任何其他编程语言中的函数都非常相似。 方法名称应以小写字母开头,如果您以大写字母开头的方法名称,Ruby可能会认为它是一个常量,因此可能会错误地解析该调用。方法应该在调用它们之前定义,否则Ruby将为未定义的方法调用引发异常。语法defmethod_name[([arg[=def......
  • 无涯教程-Ruby - 注释符
    注释是Ruby代码中的注释行,在运行时会被忽略。一行注释以#字符开头,它们从#延伸到该行的末尾,如下所示-#!/usr/bin/ruby-w#Thisisasinglelinecomment.puts"Hello,Ruby!"执行后,上述程序会产生以下输出-Hello,Ruby!Ruby多行注释您可以使用=begin和=end语法注释多......
  • Navicat Premium 16 安装并激活图文教程(亲测可行)
    NavicatPremium16安装并激活图文教程(亲测可行)写在前面:网上的po_jie套路很雷同,但是目前官网下载的NavicatPremium16软件包已经修复了永久激活的bug(网上流传的激活方式不行了),这里提供未更新前的软件安装包(可以永久激活)。一、下载安装包navicat161_premium_cs_x64.exe:ht......
  • 无涯教程-Ruby - 类和对象
    面向对象的程序涉及类(Class)和对象(Object)。以车辆为例,它包括车轮,马力以及燃油或汽油箱的容量。这些特征构成了Vehicle类的数据成员,车辆还可以具有某些函数,如停止,驾驶和超速行驶,因此,您可以将类定义为特征和函数的组合。车辆类(Vehicle)别可以定义为-ClassVehicle{Numb......
  • 无涯教程-Ruby - 简介
    Ruby是一种面向对象、命令式、函数式、动态的通用编程语言。在20世纪90年代中期由日本计算机科学家松本行弘(Matz)设计并开发。遵守BSD许可证和RubyLicense。它的灵感与特性来自于Perl、Smalltalk、Eiffel、Ada以及Lisp语言。由Ruby语言本身还发展出了JRuby(Java平台)、IronRuby(.N......
  • 无涯教程-RSpec - 期望值
    当您学习RSpec时,您可能会读到很多关于期望值(Expectations)的内容,起初可能会有些混乱。当您看到"Expectations"一词时,应牢记两个主要细节-Expectations只是it块中使用expect()方法的一条语句。当您具有如下代码:expect(1+1).toeq(2)时,您期望表达式1+1的值为2。Ex......
  • 无涯教程-RSpec - 过滤器
    在阅读本节之前,您可能需要阅读有关RSpec元数据(Metadata)的部分,因为事实证明,RSpec筛选(Filtering)基于RSpec元数据。假设您有一个spec文件,它包含两种类型的测试:正确测试和错误测试。让无涯教程这样定义它们-RSpec.describe"AnExampleGroupwithpositiveandnegativeExam......
  • 无涯教程-RSpec - 元数据
    RSpec是一种灵活而强大的工具。RSpec中的元数据(Metadata)函数也不例外。元数据通常指“关于数据的数据”。在RSpec中,这意味着有关您的描述,上下文及其块的数据,让无涯教程看一个例子-RSpec.describe"AnExampleGroupwithametadatavariable",:foo=>17docontext'an......