Ruby2日目
今回はCollectionやコードブロックの説明。この辺が出てくるとRubyっぽいかも。
Rubyは多重継承を避けるためにMixinを使ってる。
Mixinと言う単語は始めて聞いたが、多重継承を避けるための工夫としておもしろい。
各オブジェクト指向言語での多重継承の仕様に関して時間があったらここでまとめてみよう。
試してみよう
最初にeachだけを用いて16個の数値と4個の数値の配列の中身を同時に出力せよ。次に、同じ異をEnumerableのeach_sliceを用いて実行せよ
each
#!/usr/bin/ruby
a = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
b = [20,21,22,23]
i=0
a.each {|x|
puts x
puts b[i%4]
i+=1
}
each_slice
#!/usr/bin/ruby
a = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
b = [20,21,22,23]
a.each_slice(4) {|ar|
ar.each_with_index{|x,i|
puts x
puts b[i]
}
}
あってるのかな?いまいち出題の意図がつかみきれてない気がする。
Treeクラスを改造してinitializerにハッシュと配列が入れ子になった構造を指定できるようにせよ。
#!/usr/bin/ruby
class Tree
attr_accessor :children, :node_name
def initialize(child_list, key=nil)
@children = []
if key == nil
child_list.each{|root_key,root_value|
@node_name = root_key
child_list = root_value
}
else
@node_name = key
end
child_list.each{|other_key,other_value|
@children.push(Tree.new(other_value,other_key))
}
end
def visit_all(&block)
visit &block
children.each{|c| c.visit_all &block}
end
def visit(&block)
block.call self
end
end
init_list={'grandpa' => {'dad' => {'child 1' => [], 'chil\
d 2' => []}, 'uncle' => {'child 3' => [], 'child 4' => []\
}}}
ruby_tree = Tree.new(init_list)
puts "Visiting a node"
ruby_tree.visit {|node| puts node.node_name}
puts "visiting entire tree"
ruby_tree.visit_all {|node| puts node.node_name}
root nodeの扱いに苦労した。
Grepをかけ
#!/usr/bin/ruby
r = Regexp.new(ARGV[0])
ARGV.shift
ARGV.each do |filename|
i=0
File.open(filename, "r") do |io|
while l=io.gets
if l=~r
puts filename+" @ "+i.to_s()+" : "+l
end
i+=1
end
end
end
0 件のコメント:
コメントを投稿