在这个ruby语句中,"break"做了什么

Pet*_*son 2 ruby

这段代码片段来自plataformecs gem simple_form,wiki部分关于"添加自定义输入":

out << template.image_tag(object.send(attribute_name).tap {|o| break o.send(version) if version}.send('url'))
Run Code Online (Sandbox Code Playgroud)

问题只是代码在.tap {}之后阻塞了什么?特别是最初的"休息"对我来说很奇怪.

Rob*_*jic 8

break argument在块中导致块返回argument.默认情况下,tap返回给定的相同对象,但中断将导致它返回任何o.send(version) if version计算结果.

  • 附带问题:如果您需要从“tap”中“break”,但希望返回原始对象,您会怎么做? (2认同)