2010-06-11 28 views
4

所以我开始着眼于ruby,许多事情看起来不错,但我很隐晦的返回语句。我明白,默认情况下,所有内容都会返回self或nil,但不是语句的最后一个值。 (特别是)如果你正在使用一个不打算返回某些东西的方法(特别是改变状态/破坏性方法的函数!),其他人可能最终依靠返回这对方法的目的并不重要,并且具有很好的改变的机会。Ruby中的隐式返回值如何?

隐性回报的含义是什么?有没有办法让事情变得更简单?

为防止隐性回报而始终有回报是否被认为是良好做法?

我很担心这件事吗?

P.S.当人们想要从方法中返回某个特定的东西时,他们经常使用隐式返回,这难道不会让组中的其他人更容易打破其他代码吗?当然,记录一切并给出你可能会说的有意义的名字,但人们并不总是在现实生活中这样做。

+1

试一下......很多事情在第一眼看来都是错误的,直到你给它一个机会。这是一个成语,如果你觉得不对,你可以明确你的回报。 – Gishu 2010-06-11 08:05:01

+1

感谢您提出这个问题。我记得这是我在ruby gotchas列表中没有提到的东西。 http://stackoverflow.com/questions/372652/what-are-the-ruby-gotchas-a-newbie-should-be-warned-about – 2010-06-11 14:14:13

回答

4

确保不要将puts语句添加到方法或块的末尾,除非您想返回nil。

3

你太担心了。 在我的〜5年的红宝石实践中,我没有遇到过一些情况,因为我错误地回复了一些值。

它使方法看起来真正自我解释和提高可读性。我认为这很自然。

+3

但不明确返回(或在其他语言中缺少它)有助于提高其他语言的可读性(您可以一目了然地告诉您返回的内容,以及如果您没有返回任何重要内容)? – 2010-06-11 08:03:39

+0

你仍然可以做一个明确的回报。而且,像YARD这样的工具允许关于返回值的声明(因此是否可以依赖它)。 – 2010-06-11 09:07:51

+0

我明白,你仍然可以做到这一点,如果你没有看到return语句,那么你就知道函数/方法不会返回任何内容,null或self。 又是什么院子? – 2010-06-11 10:15:17

0

好问题。

这大概是应与TLC对待那些红宝石的特点之一..诶,TATFT。我的意思是,强大的测试:)

此外,它是一个很好的激励你为你的方法提供RDocs那将明确说明这些方法返回的方式。