资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

学习札记————运用RubyOnRail代码块,简化代码

在某个项目中,我和同事就某段代码具有相似部分,但单独整理成函数接口,有会增加更多的代码,为了简化代码,技术总监建议使用ruby语言中常用的代码块的方式来简化代码,为此我专门学习了代码块的语法
未更改前的代码
class node
get_nodes(root_id, nodes, level)
                first_node = Node.find(root_id)
                level += 1
                if first_node.nil? or first_node.children.nil?
                        return
                end
                first_node.children.each do |node|
                        nodes << {:node_id =>node.id,:level =>level}
                        get_nodes(node.id, nodes, level)
                end
                nodes
        end
end
本段代码主要作用是遍历结点下所有子结点,并返回包含node_id与层级的level值hash数组,但是同事需返回是整个node里的资料,为此,我们将上段代码做个小小更改
class node
get_nodes(root_id, nodes, level,&block)  <<参数更改
                first_node = Node.find(root_id)
                level += 1
                if first_node.nil? or first_node.children.nil?
                        return
                end
                first_node.children.each do |node|
 更改部分 >>        nodes << yield(node,level)
                        get_nodes(node.id, nodes, level,&block)
                end
               nodes
        end
end
因为本段程序有递归调用,所有在传入参数时候,要加&block,如果不用调用到下一方式,可以不用加&block
而怎么调用这段代码呢?
本列我是在另一个类中调用这段代码
class create_text
Node.new.get_nodes(root.id,Array.new,count = 0){ |node,level|{:node_id =>node.id,:level =>level}}
end
代码块如果带参数可以再||中写入参数,其作用域是在调用函数环境中

当前文章:学习札记————运用RubyOnRail代码块,简化代码
URL链接:http://cdkjz.cn/article/jjpded.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220