Ruby中的回报点是什么?
return
和只是把一个variables如下所示之间的区别是什么:
没有回报
def write_code(number_of_errors) if number_of_errors > 1 mood = "Ask me later" else mood = "No Problem" end mood end
返回
def write_code(number_of_errors) if number_of_errors > 1 mood = "Ask me later" else mood = puts "No Problem" end return mood end
return
可以让你早日脱离:
def write_code(number_of_errors) return "No problem" if number_of_errors == 0 badness = compute_badness(number_of_errors) "WHAT?! Badness = #{badness}." end
如果number_of_errors == 0
,那么"No problem"
将立即返回。 但是,在方法结束时,正如你所观察到的那样,这是不必要的。
编辑:为了演示return
立即退出,请考虑此function:
def last_name(name) return nil unless name name.split(/\s+/)[-1] end
如果你把这个函数叫做last_name("Antal SZ")
,它将返回"SZ"
。 如果你把它叫做last_name(nil)
,它将返回nil
。 如果return
不立即中止,它会尝试执行nil.split(/\s+/)[-1]
,这将引发错误。
如果是方法中的最后一行,使用“return”是不必要的,因为Ruby会自动返回最后一个计算的expression式。
你甚至不需要最后的“心情”,也不需要在IF声明中的这些任务。
def write_code(number_of_errors) if number_of_errors > 1 "ERROR" else "No Problem" end end puts write_code(10)
输出:
错误
Ruby总是返回! 最好的办法是
def write_code(number_of_errors) (number_of_errors > 1)? "ERROR" : "No Problem" end
这意味着如果number_of_errors> 1它将返回错误否则没有问题
当我正在浏览一个列表时,我使用return,并且如果列表中的任何成员满足条件,我想退出该函数。 我可以用一个单一的陈述来完成这个工作
list.select{|k| k.meets_criteria}.length == 0
在某些情况下,但是
list.each{|k| return false if k.meets_criteria}
也是一条线 – 在我看来,有一些增加了灵活性。 例如,第一个例子假设这是该方法中唯一的一行,而且无论如何我们都希望从这一点返回。 但是,如果这是testing是否可以安全地继续执行其余的方法,那么第一个示例将需要以不同的方式处理这个问题。
编辑:
为了增加一些灵活性,请考虑以下代码行:
list_of_method_names_as_symbols.each{|k| list_of_objects.each{|j| return k if j.send(k)}}
我确信这可以在一行中完成,而不会有任何return
,但是我的头顶我不明白。
但是现在这是一个相当灵活的代码行,可以用任何布尔方法列表和实现这些方法的对象列表来调用。
编辑
应该指出,我假设这条线是在一个方法,而不是一个块。
但这主要是一种风格的select,我认为在大多数情况下,你可以也可能应该避免使用return
。
它的好的ruby提供了这个不明确指定return语句的好处,但我只是觉得,作为一个编程标准,应该总是努力在任何需要的地方指定“return”语句。 这有助于使代码对于来自不同背景(如C ++,Java,PHP等)和学习Ruby的人员更具可读性。 “返回”语句不会损害任何东西,那么为什么跳过常规和更标准的函数返回的方式。
在函数的最后一行return
不相干只是Ruby的syntaxic糖 。 在大多数过程语言中,您需要在每个函数中写入return
(在C ++中为非void)函数。