温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2020-07-02 01:45:13 来源:网络 阅读:282 作者:JackSongBlack 栏目:编程语言
在某个项目中,我和同事就某段代码具有相似部分,但单独整理成函数接口,有会增加更多的代码,为了简化代码,技术总监建议使用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
代码块如果带参数可以再||中写入参数,其作用域是在调用函数环境中
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI