- 921. Minimum Add to Make Parentheses Valid 使括号有效的最少添加
- 915. Partition Array into Disjoint Intervals 分割数组
- 932. Beautiful Array 漂亮数组
- 940. Distinct Subsequences II 不同的子序列 II
模块(Module) 是一种把方法、类和常量组合在一起的方式。
模块(Module) 定义了一个命名空间,相当于一个沙盒,在里边的方法和常量不会与其它地方的方法常量冲突
1、 模块提供了一个命名空间和避免名字冲突;
2、 模块实现了mixin装置;
Ruby 语言中的模块定义语法格式如下
module <ModuleName>
statement1
statement2
...........
end
1、 模块中的常量命名与类常量命名类似,以大写字母开头;
2、 模块中的方法定义看起来和类也相似;
3、 可以使用模块名称和两个冒号来引用一个常量;
# !/usr/bin/ruby -w
# -*- encoding:utf-8 -*-
# filename: hello.rb
# author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
# Copyright © 2015-2065 www.ddkk.com. All rights reserved.
module Hello
PI = 3.141592654
def Hello.sin(x)
# ..
end
def Hello.cos(x)
# ..
end
end
# !/usr/bin/ruby -w
# -*- encoding:utf-8 -*-
# filename: quick.rb
# author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
# Copyright © 2015-2065 www.ddkk.com. All rights reserved.
module Quick
VERY_BAD = 0
BAD = 1
def Quick.sin(badness)
# ...
end
end
可以像定义类方法一样,在模块中定义一个方法时,可以指定在模块名称后跟着一个点号,点号后跟着方法名
require 语句用于加载模块
如果一个第三方的程序想要使用任何已定义的模块,可以使用 Ruby require 语句来加载模块文件
require filename
文件扩展名 .rb 不是必需的
# !/usr/bin/ruby -w
# -*- encoding:utf-8 -*-
# filename: main.rb
# author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
# Copyright © 2015-2065 www.ddkk.com. All rights reserved.
$LOAD_PATH << '.'
require 'quick.rb'
require 'hello'
y = Quick.sin(Trig::PI/4)
wrongdoing = Hello.sin(Moral::VERY_BAD)
使用** $
LOAD_PATH << '.'** 让 Ruby 知道必须在当前目录中搜索被引用的文件。 如果不想使用
$` LOAD_PATH,那么您可以使用 require_relative 来从一个相对目录引用文件
文件包含相同的函数名称。所以,这会在引用调用程序时导致代码模糊,但是模块避免了这种代码模糊,可以使用模块的名称调用适当的函数。
Ruby 语言允许在类中嵌入模块
Ruby 语言提供了 include 语句用来在类中嵌入模块
include modulename
如果模块是定义在一个单独的文件中,那么在嵌入模块之前就需要使用 require 语句引用该文件
# !/usr/bin/ruby -w
# -*- encoding:utf-8 -*-
# filename: week.rb
# author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
# Copyright © 2015-2065 www.ddkk.com. All rights reserved.
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 -w
# -*- encoding:utf-8 -*-
# filename: main.rb
# author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
# Copyright © 2015-2065 www.ddkk.com. All rights reserved.
$LOAD_PATH << '.'
require "week"
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
运行以上 Ruby 范例,输出结果如下
$ ruby main.rb
Sunday
You have four weeks in a month
You have 52 weeks in a year
Sunday
120
在继续阅读本节之前,你需要初步了解具备面向对象的概念
当一个类可以从多个父类继承类的特性时,该类显示为多重继承
Ruby 不直接支持多重继承,但是 Ruby 的模块(Module)有另一个神奇的功能。它消除了多重继承的需要,提供了一种名为 mixin 的机制
Ruby 语言没有真正实现多重继承机制,而是采用 mixin 机制作为替代品
将模块 include 到类定义中,模块中的方法就 mix 进了类中
# !/usr/bin/ruby -w
# -*- encoding:utf-8 -*-
# filename: a.rb
# author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
# Copyright © 2015-2065 www.ddkk.com. All rights reserved.
module A
def a1
end
def a2
end
end
# !/usr/bin/ruby -w
# -*- encoding:utf-8 -*-
# filename: b.rb
# author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
# Copyright © 2015-2065 www.ddkk.com. All rights reserved.
module B
def b1
end
def b2
end
end
# !/usr/bin/ruby -w
# -*- encoding:utf-8 -*-
# filename: hello.rb
# author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
# Copyright © 2015-2065 www.ddkk.com. All rights reserved.
$LOAD_PATH << '.'
require "a"
require "b"
class Hello
include A
include B
def s1
end
end
# !/usr/bin/ruby -w
# -*- encoding:utf-8 -*-
# filename: main.rb
# author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
# Copyright © 2015-2065 www.ddkk.com. All rights reserved.
require "hello"
samp= Hello.new
samp.a1
samp.a2
samp.b1
samp.b2
samp.s1
可以看到类 Hello 继承了两个模块,可以说类 Hello 使用了多重继承或 mixin
以下是一个非常简单的ruby服务器。 require 'socket' local_socket = Socket.new(:INET, :STREAM) local_addr = Socket.
我正在使用 OS X(使用 bash),并且是 unix 的新手。我想知道是否可以修改一些文件以便运行 ruby 程序,我不需要“ruby file.rb”,而是可以运行“ruby.rb”。 有理
我在用 Ruby 替换字符串时遇到一些问题。 我的原文:人之所为不如兽之所为。 我想替换为:==What== human does is not like ==what== animal does.
我想在一个循环中从 Ruby 脚本做这样的事情: 写一个文件a.rb(每次迭代都会改变) 执行系统(ruby 'a.rb') a.rb 将带有结果的字符串写入文件“results” a.rb 完成并且
我的问题是尝试创建一个本地服务器,以便我可以理解由我的新团队开发的应用程序。我的问题是我使用的是 Ruby 2.3.3,而 Gemfile 需要 2.3.1。我无法编辑 Gemfile,因为我被告知很
我有一个使用 GLI 框架用 Ruby 编写的命令行实用程序。我想在我的主目录中配置我的命令行实用程序,使用 Ruby 本身作为 DSL 来处理它(类似于 Gemfile 或 Rakefile)。 我
我的 Rails 应用 Controller 中有这段代码: def delete object = model.datamapper_class.first(:sourced_id =>
我正在寻找的解析器应该: 对 Ruby 解析友好, 规则设计优雅, 产生用户友好的解析错误, 用户文档的数量应该比计算器示例多, UPD:允许在编写语法时省略可选的空格。 快速解析不是一个重要的特性。
我刚开始使用 Ruby,听说有一种“Ruby 方式”编码。除了 Ruby on Rails 之外,还有哪些项目适合学习并被认可且设计良好? 最佳答案 Prawn被明确地创建为不仅是一个该死的好 PDF
我知道之前有人问过类似的问题,但是我该如何构建一个无需在前面输入“ruby”就可以在终端中运行的 Ruby 文件呢? 这里的最终目标是创建一个命令行工具包类型的东西。现在,为了执行我希望用户能够执行的
例如哈希a是{:name=>'mike',:age=>27,:gender=>'male'}哈希 b 是 {:name=>'mike'} 我想知道是否有更好的方法来判断 b 哈希是否在 a 哈希内,而
我是一名决定学习 Ruby 和 Ruby on Rails 的 ASP.NET MVC 开发人员。我已经有所了解并在 RoR 上创建了一个网站。在 ASP.NET MVC 上开发,我一直使用三层架构:
最近我看到 Gary Bernhardt 展示了他用来在 vim 中执行 Ruby 代码的 vim 快捷方式。捷径是 :map ,t :w\|:!ruby %. 似乎这个方法总是执行系统 Rub
在为 this question about Blue Ruby 选择的答案中,查克说: All of the current Ruby implementations are compiled to
我有一个 Ruby 数组 > list = Request.find_all_by_artist("Metallica").map(&:song) => ["Nothing else Matters"
我在四舍五入时遇到问题。我有一个 float ,我想将其四舍五入到小数点后的百分之一。但是,我只能使用 .round ,它基本上将它变成一个 int,意思是 2.34.round # => 2. 有没
我使用 ruby on rails 编写了一个小型 Web 应用程序,它的主要目的是上传、存储和显示来自 xml(文件最多几 MB)文件的结果。运行大约 2 个月后,我注意到 mongrel 进程
我们如何用 Ruby 转换像这样的字符串: 𝑙𝑎𝑡𝑜𝑟𝑟𝑒 收件人: Latorre 最佳答案 s = "𝑙𝑎𝑡𝑜𝑟𝑟𝑒" => "𝑙𝑎𝑡𝑜𝑟𝑟𝑒" s.u
通过 ruby monk 时,他们偶尔会从左侧字段中抛出一段语法不熟悉的代码: def compute(xyz) return nil unless xyz xyz.map {|a,
不确定我做错了什么,但我似乎弄错了。 问题是,给你一串空格分隔的数字,你必须返回最大和最小的数字。 注意:所有数字都是有效的 Int32,不需要验证它们。输入字符串中始终至少有一个数字。输出字符串必须
我是一名优秀的程序员,十分优秀!