《七周七语言》之ruby练习2

来源:互联网 发布:剑道眼镜知乎 编辑:程序博客网 时间:2024/05/16 07:28
有一个数组,包含16个数字。仅用each方法打印数组中的内容,一次打印4个数字。然后,用可枚举模块的each_slice方法重做一遍。

myarray = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]myarray[0..3].each{|a| puts a}myarray[4..7].each{|a| puts a}myarray[8..11].each{|a| puts a}myarray[12..15].each{|a| puts a}myarray.each_slice(4){|a| puts a}


我们前面实现了一个有趣的树类Tree,但它不具有简洁的用户接口,来设置一棵新树,为它写一个初始化方法,接受散列表和数组嵌套的结构。写好之后,你可以这样设置新树:{'grandpa' => { 'dad' => {'child 1' => {}, 'child 2' => {} }, 'uncle'=> {'child 3' => {}, 'child 4' => {} } } }

class Tree    attr_accessor :children, :node_name    def initialize(tree = {})        @node_name = tree.keys()[0]        @chlidren = []        puts @node_name        if @node_name            tree[@node_name].each do |key, value|                puts key                puts value                @children.push(Tree.new({key=>value}))            end        end    end    def visit_all(&block)        visit &block        children.each{|c| c.visit_all  &block}    end    def visit(&block)        block.call self    endendmy_hash_table2 = { 'dad' => {'child 1' => {}, 'child 2' => {} } }my_hash_table1 = {'grandpa' => { 'dad' => {'child 1' => {}, 'child 2' => {} }, 'uncle'=> {'child 3' => {}, 'child 4' => {} } } }my_tree = Tree.new(my_hash_table2)puts "visting a node"my_tree.visit {|node| puts node.node_name}putsputs "visiting entire tree"my_tree.visit_all {|node| puts node.node_name}puts
这段代码一直报错,in `block in initialize': undefined method `push' for nil:NilClass (NoMethodError)

我也不知道为什么了。@children根本没有机会等于nil啊。??先把错误放里吧。。


写一个简单的grep程序,把文件中出现某词组的行全都打印出来。这需要使用简单的正则表达式匹配,并从文件中读取各行。(这在Ru
by中超乎想象地简单。)如果你愿意的话,还可以加上行号。

tar = ARGV.shiftARGV.each_with_index {|l, i| puts "#{ARGF.filename} #{i}:#{l} if /#{tar}/.match(l)"}
使用:ruby grep.rb tar file1 file2
网上看到的,暂时看不懂,先放这里。。


0 0
原创粉丝点击