Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby:有没有需要return关键字的情况?_Ruby_Return - Fatal编程技术网

Ruby:有没有需要return关键字的情况?

Ruby:有没有需要return关键字的情况?,ruby,return,Ruby,Return,在Ruby中,我们似乎总是可以不使用关键字return,比如: def abc #some calculations a = x + some_stuff end 而abc将返回最后一个表达式的计算结果,这里是(x+一些东西)。那么,在哪些情况下使用退货是必要的,还是强制性的?在某些情况下,使用return关键字会使(或已经使)问题的答案更加优雅吗?在许多情况下,return会派上用场。重要的一点是,它允许您突破您的方法,这是您的示例无法做到的。一个这样的例子 def abc # d

在Ruby中,我们似乎总是可以不使用关键字return,比如:

def abc
  #some calculations
  a = x + some_stuff
end

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

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

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

在上面的示例中,在理想情况下,该方法将始终返回一些值。但是,如果不发生这种情况,它将引发一个错误

以下是一些我认为返回有用的情况。 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(当然还有其他方法)


……但在所有这些情况下,都不强制使用return。

除非需要,否则它如何优于
提出“不希望的”\u标志;结果
?@mudasobwa如果在引发错误之前需要进行其他计算或更新实例变量或日志,或执行所有这些的组合,该怎么办?我再次知道,即使这些事情也可以通过多种其他方式来完成,也许可以创建不同的方法,但这只是一个使用return的例子。早期的
return
作为该方法的第一行是有意义的。这就是为什么,显然,它被称为早期返回。意识到这一事实,
return
实际上是从周围的方法返回的,而不仅仅是从lambda返回的。对于第一个示例,最好在最后一行中使用
break元素
return
,这与所有ruby风格的指南相矛盾。使用
nil
而不是最后一行中的
return nil
。我不明白“3)for documentation purposes”是什么意思。这就是说,只有一个关于提前返回的正确而有意义的例子(2),它是@shivam答案的精确副本。投了否决票。我打字很慢,所以@shivam发布时我还在打字,只是想记录一个答案。我刚接触ruby(才10天),感觉好像有一些更有经验的人在谈论。谢谢你的链接。我将OP标记为重复。我认为我的问题与前面的问题不同。我编辑它试图进一步澄清。
def side_effect
  #computations on private stuff
  return nil
end