在某个项目中,我和同事就某段代码具有相似部分,但单独整理成函数接口,有会增加更多的代码,为了简化代码,技术总监建议使用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