标签:ruby
学习进入第三天,今天计划学习模块,集合以及简单的文件操作。
面向对象语言使用继承,来将行为传播到相似的对象上。具体到语言,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)。
集合用法并无什么特别之处,无非就是一些方法的使用:
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)
我们在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}
写一个简单的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
原文地址:http://blog.csdn.net/lee_3do/article/details/43985355