Ruby 正在从';下一个';坏主意?
这应该很容易。通过阅读,我认为我可以在下一个命令之后立即返回一些内容:Ruby 正在从';下一个';坏主意?,ruby,Ruby,这应该很容易。通过阅读,我认为我可以在下一个命令之后立即返回一些内容: 如果axis_range==“test” 我真正想做的是在同一行上记录下一行的原因: next@logger.info('跳过此项目是因为好玩),除非(大象大小>0) 我找不到任何关于next用法的讨论。代码当然有效。我意识到我可以用块来实现这一点,除非块,但那行代码非常简洁 两个问题: 有更好的文件吗 next的这种用法有点奇怪,不是“ruby-ish”吗 我的第一印象是,下一个关键字在循环上下文中的作用是不言而喻的,这
如果axis_range==“test”
我真正想做的是在同一行上记录下一行的原因:
next@logger.info('跳过此项目是因为好玩),除非(大象大小>0)
我找不到任何关于next
用法的讨论。代码当然有效。我意识到我可以用块来实现这一点,除非
块,但那行代码非常简洁
两个问题:
- 有更好的文件吗李>
的这种用法有点奇怪,不是“ruby-ish”吗李>next
下一个
关键字在循环上下文中的作用是不言而喻的,这是一件好事。“新值”
是下一个“新值”
的结果,这有点牵强,但我可以做到
让我恼火的是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)}
(在本例中,三元运算符更好)在第一个示例中,下一个…
语句的行为类似于一个保护子句。我喜欢。谢谢