从'下一个'返回一个坏主意的值?

jco*_*lum 10 ruby

应该是一个简单的.我想,通过阅读这篇博文,我可以在我的next命令后立即返回一些内容:

next "new value" if axis_range == "test"

我真正想做的是在同一行记录下一个原因:

next @logger.info('skipping this item because for fun') unless (elephants.size > 0)

我找不到next关于ruby doc的这种用法的任何讨论.代码肯定有效.我意识到我可以使用一个unless块来执行此操作,但该行代码非常简洁.

两个问题:

  • 某个地方有更好的文件吗?
  • 这种用法next有点奇怪而不是'ruby-ish'吗?

ste*_*lag 20

"就像returnbreak关键字一样,next可以单独使用,也可以后跟表达式或逗号分隔的表达式列表.当next在循环中使用时,后面的任何值都会 next被忽略.但是在一个块中,表达式或表达式变为yield调用块的语句的"返回值" ." (Ruby编程语言,David Flanagan和Yukihiro Matsumoto,2008年,第150页)

这本书给出了这个例子:

squareroots = data.collect do |x|
  next 0 if x < 0 # return 0 for negative values
  Math.sqrt(x)
end
Run Code Online (Sandbox Code Playgroud)

而这个替代方案:

squareroots = data.collect do |x|
  if (x < 0) then 0 else Math.sqrt(x) end
end 
Run Code Online (Sandbox Code Playgroud)