我们说我有以下(工作)伪代码:
puts results.fields.inject('') { |string, key|
lengths[key] = calculate_length(key)
string << format(key)
}
遵循ruby-style-guide我应该
puts
,(无论如何都会创建})
或end)
)do...end
用于多行块但是,将{...}
替换为do...end
时会引发
undefined method `' for :title:Symbol (NoMethodError)
因此,是否可以在不违反指南的情况下重构此代码?
答案 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?