Ruby 正在从';下一个';坏主意?

Ruby 正在从';下一个';坏主意?,ruby,Ruby,这应该很容易。通过阅读,我认为我可以在下一个命令之后立即返回一些内容: 如果axis_range==“test” 我真正想做的是在同一行上记录下一行的原因: next@logger.info('跳过此项目是因为好玩),除非(大象大小>0) 我找不到任何关于next用法的讨论。代码当然有效。我意识到我可以用块来实现这一点,除非块,但那行代码非常简洁 两个问题: 有更好的文件吗 next的这种用法有点奇怪,不是“ruby-ish”吗 我的第一印象是,下一个关键字在循环上下文中的作用是不言而喻的,这

这应该很容易。通过阅读,我认为我可以在下一个命令之后立即返回一些内容:

如果axis_range==“test”

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

next@logger.info('跳过此项目是因为好玩),除非(大象大小>0)

我找不到任何关于
next
用法的讨论。代码当然有效。我意识到我可以用
块来实现这一点,除非
块,但那行代码非常简洁

两个问题:

  • 有更好的文件吗
  • next
    的这种用法有点奇怪,不是“ruby-ish”吗
我的第一印象是,
下一个
关键字在循环上下文中的作用是不言而喻的,这是一件好事。
“新值”
下一个“新值”
的结果,这有点牵强,但我可以做到

让我恼火的是
next@logger.info('跳过此项是因为好玩)
可能很难理解。
info
调用的结果是否会由
next
返回,这一点并不明显,我相信很多开发人员都会被它甩了

虽然代码可能更简洁,但很难理解。我要么评论代码在做什么,要么做其他事情


不过,请回答两个问题。我很乐意成为一名开发人员,以这种心态维护您的代码

>P>我不会固有的问题,除非它在许多其他复杂代码的中间是正确的(我尝试平均每一个方法2个LOC,通常是一个或两个长4-8行,一组只有一行,平均输出)。 如果代码很长且难以理解,那么我已经成功地将该方法引入到它自己的对象中。我只是让该方法实例化一些执行其任务的对象,并要求它提供结果,然后代码就可以简单得多,通常将循环减少到一两行,并允许它有一个方法来执行此日志记录,然后您可以通过简单的调用log_error或任何您认为合适的名称来处理

这些天我认为复杂的过程方法是一种气味,在这个方法中有一个对象孕育。 “与
return
break
关键字一样,
next
可以单独使用,也可以 它后面可能跟一个表达式或逗号分隔的 表达式。在循环中使用
next
时,下列任何值
next
被忽略。但在块中,表达式 成为调用 (Ruby编程语言,David Flanagan&Yukhiro Matsumoto,2008,第150页)

这本书举了一个例子:

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

squareroot=data.collect do|x|
如果x<0,则下一个0#返回0表示负值
数学sqrt(x)
结束
而这个替代方案:

squareroots = data.collect do |x|
  if (x < 0) then 0 else Math.sqrt(x) end
end 

squareroot=data.collect do|x|
如果(x<0),则0 else数学sqrt(x)结束
结束

平方根=data.collect{x |(x<0)?0:Math.sqrt(x)}
(在本例中,三元运算符更好)在第一个示例中,
下一个…
语句的行为类似于一个保护子句。我喜欢。谢谢