【问题标题】:Whats up with implicit return values in Ruby?Ruby 中的隐式返回值是怎么回事?
【发布时间】:2010-06-11 07:33:11
【问题描述】:

所以我开始研究 ruby​​,很多东西看起来都不错,但我对隐式返回语句感到很反感。我理解默认情况下所有内容都返回 self 或 nil 但不是语句的最后一个值。

对我来说,它看起来非常脆弱(尤其是)如果您使用的方法不打算返回某些东西(尤其是改变状态/破坏性方法的函数!),其他人可能最终依赖于返回对方法的目的不重要,并且有很大的改变机会。

隐式返回有什么意义?有没有办法让一些事情变得更简单?

总是有一个回报以防止隐式回报被认为是一种好的做法吗?

我是不是很担心这个?

附:当人们打算从方法中返回某个东西时,他们是否经常使用隐式返回,这不是让你的团队中的其他人更容易破坏彼此的代码吗?当然,记录所有内容并给出你可能会说的有意义的名字,但人们在现实生活中并不总是这样做。

【问题讨论】:

  • 试一试...很多事情乍一看似乎是错误的,直到你给它一个机会。这是一个成语,如果你觉得不一样,你可以明确地表达你的回报。
  • 感谢您提出这个问题。我记得这是我在红宝石陷阱列表中没有提到的东西。 stackoverflow.com/questions/372652/…

标签: ruby oop return-value implicit


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你太担心了。 在我大约 5 年的 ruby​​ 实践中,我没有遇到过错误依赖某些返回值的案例。

    而且它使方法看起来非常不言自明并提高了可读性。我认为这很自然。

    【讨论】:

    • 但是显式返回(或其他语言中没有返回)是否有助于提高其他语言的可读性(您可以一眼看出您要返回的位置以及是否没有返回任何内容/有什么重要的)?
    • 你仍然可以做一个明确的回报。此外,像 YARD 这样的工具允许关于返回值的声明(因此你是否可以依赖它)。
    • 我知道你仍然可以这样做,它只是在许多其他语言中,如果你没有看到返回语句,你知道函数/方法什么都不返回,null 或 self。还有什么是院子?
    • 我看到了由于缺少明确的return 而导致的错误(不是我的)。除了早期回报的不对称性,它通常是not obvious what will actually be returned。但是,我从未在 LIPS 中将此视为问题。
    【解决方案3】:

    好问题。

    这可能是应该用 TLC 处理的红宝石特性之一。嗯,TATFT.. 我的意思是,强大的测试 :)

    此外,为您的方法提供 RDocs 也是一种很好的激励,这些 RDocs 将清楚地说明方法返回的内容。

    【讨论】:

      猜你喜欢
      • 2010-11-07
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 1970-01-01
      相关资源
      最近更新 更多