return
之间有什么区别,只需输入如下变量:
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
答案 0 :(得分:112)
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
立即退出,请考虑以下功能:
def last_name(name)
return nil unless name
name.split(/\s+/)[-1]
end
如果您将此功能称为last_name("Antal S-Z")
,则会返回"S-Z"
。如果您将其称为last_name(nil)
,则会返回nil
。如果return
没有立即中止,它会尝试执行nil.split(/\s+/)[-1]
,这会引发错误。
答案 1 :(得分:37)
如果它是方法中要执行的最后一行,则不需要使用“return”,因为Ruby会自动返回最后一次计算的表达式。
您甚至不需要最终的“情绪”,也不需要在IF语句中进行这些任务。
def write_code(number_of_errors)
if number_of_errors > 1
"ERROR"
else
"No Problem"
end
end
puts write_code(10)
输出:
ERROR
答案 2 :(得分:4)
当我浏览列表时,我使用return,如果列表中的任何成员符合条件,我想退出该函数。我可以用一个语句来完成这个:
list.select{|k| k.meets_criteria}.length == 0
在某些情况下,但
list.each{|k| return false if k.meets_criteria}
也是一条线 - 在我看来,还有一些额外的灵活性。例如,第一个示例假定这是方法中的唯一一行,并且我们想要从这一点返回,无论如何。但是,如果这是一个测试,以确定继续使用该方法的其余部分是否安全,第一个示例将需要以不同的方式处理它。
编辑:
要增加一些灵活性,请考虑以下代码行:
list_of_method_names_as_symbols.each{|k| list_of_objects.each{|j| return k if j.send(k)}}
我确信这可以在一行中完成,没有return
,但是我不知道怎么做。
但现在这是一个相当灵活的代码行,可以使用任何布尔方法列表和实现这些方法的对象列表来调用。
编辑
应该注意的是,我假设这条线在方法内,而不是块。
但这主要是一种风格选择,我认为在大多数情况下,你可以而且可能应该避免使用return
。
答案 3 :(得分:4)
Ruby总是回来!最好的方法是
def write_code(number_of_errors)
(number_of_errors > 1)? "ERROR" : "No Problem"
end
这意味着如果number_of_errors> 1它将返回ERROR否则没有问题
答案 4 :(得分:3)
它漂亮的ruby给出了这个不明确指定return语句的优点,但我觉得,作为编程标准,应该始终努力在需要的地方指定“return”语句。这有助于使代码对于来自不同背景的人(如C ++,Java,PHP等)和学习ruby更具可读性。 “return”语句不会伤害任何东西,所以为什么要跳过传统的,更标准的函数返回方式。
答案 5 :(得分:0)
对于来自其他语言的警告,请谨慎行事。假设您有一个类似OP的函数,并且利用“最后计算的”规则自动设置了返回值:
def write_code(number_of_errors)
if number_of_errors > 1
mood = "Ask me later"
else
mood = "No Problem"
end
end
,假设您添加了一条调试(或记录)语句:
def write_code(number_of_errors)
if number_of_errors > 1
mood = "Ask me later"
else
mood = "No Problem"
end
puts "### mood = #{mood}"
end
现在猜猜是什么。您已经破坏了代码,因为puts
返回nil,现在变成了函数的返回值。
解决方案是养成始终像OP那样将返回值显式地放在最后一行的习惯:
def write_code(number_of_errors)
if number_of_errors > 1
mood = "Ask me later"
else
mood = "No Problem"
end
puts "### mood = #{mood}"
mood
end
答案 6 :(得分:-1)
函数的最后一行return
不一定只是Ruby的语法糖。在大多数过程语言中,您需要在每个(C ++中的非void)函数中编写return
。