Ruby学习之module

我们可以认为module是一个专门存放一系列方法和常量的工具箱。

module和class非常像, 只是module不能创建实例也不能有子类, 它们仅仅能存放东西。

例如:

module Circle

  PI = 3.141592653589793

  def Circle.area(radius)
    PI * radius**2
  end

  def Circle.circumference(radius)
    2 * PI * radius
  end
end

module书写格式

module ModuleName
    #
end

就像类名一样, module名也用大写字母,并且不使用下划线_。

module的一个最主要的作用是把方法和常量分离到一个有名字的空间中,这个空间叫做名字空间(namespacing),这样就不会混淆例如Math::PI和Circle::PI这两种不同的PI值。两个冒号::被称作范围解析操作符, 它用来告诉Ruby去哪找到我们所需要的那个值或方法,如果我们想找Math::PI,Ruby知道要到Math的module中去找PI。

一些module已经包含在了Ruby解释器中,但是有些需要显式地包含进来, 我们可以用关键字require,如下:

require "module"

如果我们想要用Ruby的Date module来显示今天的日期, 但是我们还没有用require把它包含进来,那么我们需要进行如下操作:

require "date"
puts Date.today

我们当然可以用require包含更多的module, 但是我们还可以用include关键字

任何类如果include了一个module,那么这个类可以使用这个module的方法。

使用include有一个好处, 那就是我们不再必须写包含常量或方法的module名了,因为module中所有的信息都已经包含进了include这个module的类, 我们可以直接使用PI而不用Math::PI, 如下:

class Angle
  include Math
  attr_accessor :radians

  def initialize(radians)
    @radians = radians
  end

  def cosine
    cos(@radians)
  end
end

acute = Angle.new(1)
acute.cosine
时间: 2024-12-20 15:43:45

Ruby学习之module的相关文章

Ruby学习之mixin

直接上代码: module Action def jump @distance = rand(4) + 2 puts "I jumped forward #{@distance} feet!" end end class Rabbit include Action attr_reader :name def initialize(name) @name = name end end class Cricket include Action attr_reader :name def i

Ruby学习笔记

Ruby学习笔记 Ruby语言中,以对象为基本单位,可以说所有的元素都是对象.按照之前对于面向对象程序的理解,对象是指包含了特定属性和方法集合的一组程序.对象由类来定义,具体的表现为对象实例.也就是说,对象是类的实例化[2]. Ruby语言的基础元素 对象:数值对象.字符串对象.正则表达式对象.时间对象.文件对象.目录对象.数组.哈希.例外对象等 数值对象   由于Ruby中一切数据都是对象,所以我们处理的数字实际上也是对象. a = 10,这样一个简单的赋值语句,实际上应当理解为 a = Nu

Ruby学习的一天-window下环境搭建及Ruby基础

学习Ruby参考教程: http://www.w3cschool.cc/ruby/ruby-installation-windows.html windowx下的ruby学习一.安装ruby,下载最新window稳定版ruby,这里是1.9.3版本点击next安装直到完成,为了方便,在安装界面下方会有个复选框提示是否需要安装watir,DevKit和环境配置的选项,这里勾选了,就不用那么麻烦配置了.安装完成后直接进入命令行,输入ruby -v .如果不出问题,应该会显示当前ruby版本信息. 二

ruby学习笔记(1)-puts,p,print的区别

ruby学习笔记-puts,p,print的区别 共同点:都是用来屏幕输出的. 不同点:puts 输出内容后,会自动换行(如果内容参数为空,则仅输出一个换行符号):另外如果内容参数中有转义符,输出时将先处理转义再输出p 基本与puts相同,但不会处理参数中的转义符号print 基本与puts相同,但输出内容后,不会自动在结尾加上换行符 1 2 3 4 5 6 7 s = "aaaa\nbb\tbb" p s p "****************" puts s p

ruby 学习笔记 2 -变量

变量 在ruby的世界里,变量有5种,全局变量 局部变量 实例变量 常量 类变量以及伪变量 常用的: 全局: 在全局使用,使用$开头,因为是全局的,所以在任何的代码例子中都可以改变其值,造成混乱,所以不建议使用. 局部: 在一定范围内有作用.如 i = 10 ,其中i 就是一个局部变量 常量: 例如圆周率Pi,但是Pi 我们可以赋予他其他值,是可以变化的. 常量的首个字母必须大写,当试图改变常量值时,解释器会给出警告“ex4.rb:19: warning: already initialized

ruby 学习笔记 1

写ruby blog  系统的记录下.也是对我学ruby的点滴记录. 先介绍下我的学习环境.系统:ubuntu12.04文档:techotopia ,ruby文档,the hard way learn ruby 以及其他文档记录:有道云笔记 关于ruby 学习ruby 通常会介绍下ruby的历史和发展,但是我觉得这些有的废话, 关于ruby,是一个日本人写出来的,是一门解释性语言 这就够了. 开始 在ubuntu上 ,先判断下是否installed ruby. 1 ruby -v 如果安装了会打

Ruby学习笔记0708

#!/usr/bin/env ruby class MegaGreeter attr_accessor :names # 初始化這個物件 def initialize(names = "World") @names = names end # 向每個人說 hi def say_hi if @names.nil? puts "..." elsif @names.respond_to?("each") # @names 是可以迭代的陣列容器 @nam

Ruby学习心得之 Linux下搭建Ruby环境

Ruby学习心得之 Linux下搭建Ruby环境1.前言2.Linux下安装Ruby环境 一.前言 本篇博文记录了Linux下Ruby编程环境的搭建. 本文内容基于以下文章:http://www.cnblogs.com/xfiver/archive/2012/03/08/2385833.html (linux下ruby安装[ubuntu10.10])http://www.360doc.com/content/07/0131/17/4910_351421.shtml (Ruby 在 Linux 上

雷林鹏分享:Ruby 模块(Module)

Ruby 模块(Module) 模块(Module)是一种把方法.类和常量组合在一起的方式.模块(Module)为您提供了两大好处. 模块提供了一个命名空间和避免名字冲突. 模块实现了 mixin 装置. 模块(Module)定义了一个命名空间,相当于一个沙箱,在里边您的方法和常量不会与其他地方的方法常量冲突. 语法 module Identifier statement1 statement2 ........... end 模块常量命名与类常量命名类似,以大写字母开头.方法定义看起来也相似: