Ruby中的返回点是什么?

the*_*gah 78 ruby return

return和变换之间有什么区别,如下所示:

没有回报

def write_code(number_of_errors)
  if number_of_errors > 1
     mood = "Ask me later"
  else
     mood = "No Problem"
  end  
  mood
end
Run Code Online (Sandbox Code Playgroud)

返回

def write_code(number_of_errors)
  if number_of_errors > 1
    mood =  "Ask me later"
  else
    mood = puts "No Problem"
  end  
  return mood
end
Run Code Online (Sandbox Code Playgroud)

Ant*_*sky 114

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
Run Code Online (Sandbox Code Playgroud)

如果number_of_errors == 0,那么"No problem"将立即返回.但是,在方法结束时,正如您所观察到的那样,这是不必要的.


编辑:要证明return立即退出,请考虑以下功能:

def last_name(name)
  return nil unless name
  name.split(/\s+/)[-1]
end
Run Code Online (Sandbox Code Playgroud)

如果您将此功能称为last_name("Antal S-Z"),则会返回"S-Z".如果你把它称为last_name(nil),它会返回nil.如果return 没有立即中止,它将尝试执行nil.split(/\s+/)[-1],这将引发错误.

  • 您可以使用`return`,`break`等没有参数 - 默认情况下它们将返回`nil`. (8认同)
  • 不,反过来说:`return`*立即*退出方法.如果你考虑那个例子,如果你知道一切都没问题,那么计算不良就没有用.我会编辑我的答案以使其更清晰. (4认同)

dan*_*neu 38

如果它是方法中要执行的最后一行,则不需要使用"return",因为Ruby会自动返回最后一次计算的表达式.

你甚至不需要最终的"情绪",也不需要IF语句中的那些作业.

def write_code(number_of_errors)
    if number_of_errors > 1
       "ERROR"
    else
       "No Problem"
    end  
end

puts write_code(10)
Run Code Online (Sandbox Code Playgroud)

输出:

错误

  • 来自非Ruby背景,输出肯定是WTF.:) (36认同)