码迷,mamicode.com
首页 > 其他好文 > 详细

Ruby七天入门(3 Mixin,集合,文件操作)

时间:2015-02-28 14:33:46      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:ruby

DAY 3

学习进入第三天,今天计划学习模块,集合以及简单的文件操作。

3.1Mixin 模块

面向对象语言使用继承,来将行为传播到相似的对象上。具体到语言,C++使用的是多继承,但是过于复杂,Java采用接口的方式,而Ruby则选择使用了模块,先来看下代码:

module ToFile
    def filename
        "object_#{self.object_id}.txt"
    end

    def to_f
        file = File.open(filename,‘w‘)
             file.write(to_s)
    end
end

class Person
    include ToFile
    attr_accessor:name

    def initialize(name)
        @name = name
    end

    def to_s
        name
    end
end

a = Person.new(‘Lee‘)
puts a.name,a.to_s,a.to_f

我们定义了一个ToFile的module模块,而在类Person里面include了它(感觉有点像是C++中的include)。

  • 通过这样的include,Person类直接具有了ToFile的能力,而且他们建立了某种关系,使得在ToFile中也可以调用Person类里面的方法。通过先定义类的主要部分,然后通过模块添加额外的能力,这种即插即用式的做法显然相当灵活,这种做法我们称之为mixin。

3.2 集合操作

集合用法并无什么特别之处,无非就是一些方法的使用:

puts ‘begin‘<=>‘end‘
a=[4,5,2,1]
a= a.sort
puts a
puts a.any? { |i| i>6  }
puts a.all? { |i| i>0 }
puts a.collect { |i| i*2 }
puts a.select { |i|i%2==0  }
puts a.max
puts a.member?(2)
  • <=>被人们叫做太空船操作符,它比较a、b两操作数,b较大返回-1,a较大返回1,相等返回0。
  • 只要集合中任一元素条件为真,any?就返回true;只有集合所有元素条件为真,all?才返回true。
  • 只要对应的类实现了太空船操作符,就可以调用sort方法排序
  • collect和map方法把函数应用到每个元素上,并返回结果数组
  • find方法找到一个符合条件的元素,而select和find_all方法均返回所有符合条件的元素。

3.3 文件操作

我们在3.1中已经使用了文件的写入,文件的读取也很简单:

File.open("tree.rb", "r") do |file|
    file.each_line("\r\n"){|line| puts "#{line.to_s}"}
end

上面代码使用了代码块,而如果不使用代码块,需要手动close文件。

file = File.open("tree.rb", "r") 
file.each_line("\r\n"){|line| puts "#{line.to_s}"}
file.close

我们也可以使用更简单的IO类:

IO.foreach("tree.rb"){|line| puts line}

3.4 今日实践

写一个简单的grep程序,把文件中出现某词组的行全都打印出来,并输出行号。

def grep(filename,match)
    line_num=0
    IO.foreach(filename)do|line| 
        line_num=line_num+1
        puts line_num.to_s+" "+line if line.match(match)
    end 
end

grep("tree.rb",/[Tt]ree/)

Ruby七天入门(3 Mixin,集合,文件操作)

标签:ruby

原文地址:http://blog.csdn.net/lee_3do/article/details/43985355

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!