ruby学习之Range

一、概述

Range在ruby中表示区间。表示方法“..”和“…”。前者表示闭合区间:

Range中的元素可以是数字、字符串和自定义的区间对象

(1..10).each{|i| puts i }      #1 2 3 4 5 6 7 8 9 10

(1…10).each{|i| puts i}    #1 2 3 4 5 6 7 8 9

1.1常用方法

Range具有可枚举能力,因此具有Enumerable的所有方法,详细参考上一篇ruby之Enumerable

Range具有一些独有的方法:

rng.first  rng.begin返回第一个元素

rng.last   rng.end返回最后一个元素

需要注意的是:不管(1..10) (1…10)第一个都是1  最后一个都是10,与遍历出来的结果是不一样的

puts "#{(1..10).first} :#{(1..10).last}"   #1 :10

puts "#{(1...10).first}:#{(1...10).last}"  #1:10

1.2自定义区间

自定义区间,只需要重写两个方法

<=>用于自定义比较对象

succ用于生成下一个元素

下面是一个简单的示例:

#!/usr/bin/ruby

#class of weekday

class WeekDay

WEEKS=["sunday","monday","tuesday","wensday","thursday","friday","sartday"]

attr_accessor :weekdayValue

def initialize(value)

if WEEKS.include?(value)

@weekdayValue=value

end

end

def to_num

WEEKS.index(@weekdayValue) if @weekdayValue

end

def <=>(other)

self.to_num<=>other.to_num

end

def succ

raise "week error" if self.to_num() >7

WeekDay.new(WEEKS[self.to_num()+1])

end

def WeekDay(value)

WeekDay.new(value)

end

def to_s

@weekdayValue

end

end

mons=WeekDay.new("monday")

fris=WeekDay.new("friday")

puts mons.succ

puts "#{mons}:#{mons.to_num()}"

puts fris.succ

puts "#{fris}:#{fris.to_num()}"

ra= (mons..fris)

ra.each{|week|

puts week

}

时间: 2024-10-23 21:45:13

ruby学习之Range的相关文章

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学习笔记】Hello World

程序员学习任何一门新语言,总是从用新语言写一个Hello World开始的,我们也不例外,先用ruby写一个极简的Hello World. 说极简应该实至名归,因为只有一行代码: <span style="font-family:SimSun;font-size:18px;">puts "Hello, Ruby!";</span> 把上述代码保存到 helloWorld.rb 文件(ruby脚本的后缀是.rb),然后执行 ruby hello