Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何收紧这个Ruby代码?_Ruby_Refactoring - Fatal编程技术网

如何收紧这个Ruby代码?

如何收紧这个Ruby代码?,ruby,refactoring,Ruby,Refactoring,我怎样才能写得更好。我试图使用inject而不是each,但一直遇到错误。我想把这座大楼收紧 def to_proc levels_of_nesting = @fields.zip(@orderings) procedure = nil levels_of_nesting.each do |field, ordering| procedure = proc_for(field, ordering) and next if procedure.nil?

我怎样才能写得更好。我试图使用inject而不是each,但一直遇到错误。我想把这座大楼收紧

def to_proc
    levels_of_nesting = @fields.zip(@orderings)

    procedure = nil
    levels_of_nesting.each do |field, ordering|
      procedure = proc_for(field, ordering) and next if procedure.nil?
      procedure = procedure.decorate_w_secondary_sorting_level(proc_for(field, ordering))
    end
    procedure
  end

我会使用一个映射来运行proc_for中的所有内容,然后使用inject组合这些过程

def to_proc
  @fields.zip(@orderings).map do |field, ordering|
    proc_for(field, ordering)
  end.inject do |prev,curr|
    prev.decorate_w_secondary_sorting_level curr
  end
end

这使得迭代器方法为您执行流控制,避免虚假的nils和if语句。

如果对proc_for(第6行)的第一次调用返回nil,那么第7行就会中断。
和next
应该是
还是next
?在我的计算机上运行良好。我用的是1.9