使用' puts'使用多个行的块接受方法

时间:2016-01-16 22:36:03

标签: ruby

我们说我有以下(工作)伪代码:

puts results.fields.inject('') { |string, key|
  lengths[key] = calculate_length(key)
  string << format(key)
}

遵循ruby-style-guide我应该

  • 忽略&#39;关键字方法的括号,即puts,(无论如何都会创建})end)
  • do...end用于多行块

但是,将{...}替换为do...end时会引发

undefined method `' for :title:Symbol (NoMethodError)

因此,是否可以在不违反指南的情况下重构此代码?

1 个答案:

答案 0 :(得分:0)

{}do end

之间的优先顺序有所不同

如果您使用do end,则该块与puts语句相关联,而大括号与results.field.inject('')

相关联

如果您想使用do end,则必须通过括号删除关联的歧义。这是指南被认为是指导方针而非绝对规则的“陷阱”之一。

另见答案......

In Ruby, why is a method invocation not able to be treated as a unit when "do" and "end" is used?