【问题标题】:Ruby: Are there any situations where the return keyword is necessary? [duplicate]Ruby:有没有需要 return 关键字的情况? [复制]
【发布时间】:2016-03-04 07:33:11
【问题描述】:

在 Ruby 中,我们似乎总能在不使用关键字 return 的情况下解决问题,例如:

def abc
  #some calculations
  a = x + some_stuff
end

abc 将返回最后一个表达式的计算结果,这里将是 (x + some_stuff)。那么在任何情况下,return 的使用是必要的还是强制的呢?在某些情况下,使用 return 关键字会使(或已经使)问题的答案更加优雅?

【问题讨论】:

  • 我认为我的问题与之前提出的不同。我对其进行了编辑以进一步澄清。

标签: ruby return


【解决方案1】:

return 在很多情况下都会派上用场。重要的一点是它允许你打破你的方法,这是你的例子无法做到的。一个这样的例子

def abc
 # do some stuff
 return result if desired_flag
 raise "undesired"
end

在上面的例子中,在理想情况下,方法总是会返回一些值。但是,如果这没有发生,则会引发错误。

【讨论】:

  • raise "undesired" unless desired_flag ; result好在哪里?
  • @mudasobwa 如果您需要在引发错误之前进行一些其他计算或更新实例变量或记录或执行所有这些操作的组合,该怎么办?
  • 我再次知道,即使这些事情也可以通过多种其他方式完成,也许可以创建不同的方法,但这只是我可以使用 return 的一个示例。
  • 早期return 作为方法的第一行是有意义的。这就是为什么,显然,它被称为 early return。
【解决方案2】:

这些是我认为返回有用的几种情况。 1) 使用特定构造时,该构造具有默认返回值,但您希望返回其他值。

[1, 2, 3, 4].each do |element|
  return element if x.include?(element ** 3)
end

2) 当你想突破你的方法时喜欢。

def some_func
  return nil if failed_some_early_check
  # function code 
  @answer     # returns the list
end

3) 用于文档目的。

4) 当你写一个过程方法时,方法的副作用比返回值更重要,事实上为了防止人们(ab)使用中间状态值,你必须返回 nil(有当然还有其他方法。)

def side_effect
  #computations on private stuff
  return nil
end

.....但是在这些情况下都不是必须使用return。

【讨论】:

  • 意识到 return 实际上是从周围的方法返回的,而不仅仅是从 lambda。对于您的第一个示例,最好使用break element
  • 最后一行的 return 与所有 ruby​​ 样式指南相矛盾。在最后一行使用nil 而不是return nil
  • 我不明白“3) 用于文档目的”是什么意思。也就是说,只有一个正确有意义的提前返回示例 (2),它是 @shivam 答案的精确副本。投反对票。
  • 我打字很慢,所以当@shivam 发帖时我还在输入我的答案,只是想记录一个答案。我是 ruby​​ 新手(只有 10 天),here 我觉得有一些更有经验的人在说话。
  • 感谢您的链接。我将 OP 标记为重复。
猜你喜欢
  • 2020-08-23
  • 2018-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多