Ruby的回报点是什么?

Ruby的回报点是什么?,ruby,return,Ruby,Return,return与只输入以下变量有什么区别: 不归 返回 如果“return”是方法中要执行的最后一行,则不需要使用它,因为Ruby会自动返回最后一个计算的表达式 你甚至不需要最后的“情绪”,也不需要在IF语句中指定这些任务 def write_code(number_of_errors) if number_of_errors > 1 "ERROR" else "No Problem" end end puts write_code(

return
与只输入以下变量有什么区别:

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

你甚至不需要最后的“情绪”,也不需要在IF语句中指定这些任务

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

puts write_code(10)
输出:

错误


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
如果
numberoferrors==0
,则
将立即返回“没问题”
。但是,正如您所观察到的,在方法的末尾,这是不必要的


<强>编辑:以演示<代码>返回立即退出,请考虑此函数:

def last_name(name)
  return nil unless name
  name.split(/\s+/)[-1]
end

如果将此函数调用为
姓氏(“Antal S-Z”)
,它将返回
“S-Z”
。如果将其称为
last\u name(nil)
,它将返回
nil
。如果
return
没有立即中止,它将尝试执行
nil.split(/\s+/)[-1]
,这将抛出一个错误。

函数中最后一行不必要的
return
,这只是Ruby的合成糖。在大多数过程语言中,您需要在每个函数(C++中为非void)中编写
return

我在查看列表时使用return,如果列表中的任何成员满足条件,我希望退出该函数。我可以用一句话来实现这一点,比如:

列表。选择{| k | k.符合|标准}。长度==0

在某些情况下,但是

list。如果k.符合| u标准,则每个{k |返回false}

这也是一条线——在我看来,它增加了一些灵活性。例如,第一个示例假设这是方法中的唯一一行,并且无论发生什么情况,我们都希望从这一点返回。但是,如果这是一个测试,以确定继续使用该方法的其余部分是否安全,那么第一个示例将需要以不同的方式处理该问题

编辑:

为增加一些灵活性,请考虑下面的代码行:

list_of_method_将_命名为_符号。每个{k| list_of_对象。每个{j|如果j.send(k)}返回k

我确信这可以在一行中完成,而无需返回
,但在我的脑海中,我不知道如何实现

但现在这是一个相当灵活的代码行,可以用任何布尔方法列表和实现这些方法的对象列表调用

编辑

应该注意的是,我假设这一行在一个方法中,而不是在一个块中



但这主要是一种风格上的选择,我认为在大多数情况下,您可以而且可能应该避免使用
return

Ruby始终返回!最好的办法是

def write_code(number_of_errors)
  (number_of_errors > 1)? "ERROR" : "No Problem"
end

这意味着,如果numberoferrors>1,它将返回ERROR,否则没有问题

它漂亮的ruby提供了不显式指定return语句的良好特性,但我觉得,作为编程标准,应该始终努力在需要时指定“return”语句。这有助于使代码从C++、java、PHP等不同背景中学习,并学习Ruby。“return”语句不会损害任何东西,所以为什么要跳过从函数返回的常规和更标准的方法呢。

对于那些来自其他语言的人来说,这是一个小小的警告。假设您有一个类似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
猜猜看。您已经破坏了代码,因为
put
返回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

好的,很好的例子。因此return存储返回值,但让方法的其余部分执行。迫不及待地想使用它。不,另一种方法是:
return
立即退出该方法。如果你想一想这个例子,如果你知道一切都好的话,计算坏的程度是没有用的。我将编辑我的答案以使其更清楚。您可以使用
return
break
等,不带参数-默认情况下,它们将返回
nil
break
在这些情况下更有用。来自非Ruby背景,该输出肯定是WTF.)return可以提前退出执行。这是的工作。return也有助于使方法返回nil而不是上一个计算表达式,因此有时您会看到方法末尾没有参数的return。@GarytheGat:或者您可以简单地编写
nil
。“那么,为什么要跳过传统的、更标准的函数返回方式呢?”← 因为在Ruby中,省略
return
是常规的标准。如果你在风格良好的Ruby代码中看到
return
,那么它应该存在的原因如下。尝试将代码风格约定从一种语言应用到另一种语言只会让有经验的程序员更难上船,并让自己的代码风格保持一致1.我仍然发现自己在行尾加了分号,这不是《红宝石禅宗》中的第2句吗,“隐式比显式好"? ;-)我不会把它叫做语法糖。。。这里的核心特征是几乎所有的东西都是一个表达式<代码>如果语句,则语句块。这就是允许这种表达的原因。我同意Karoly的观点-它不是语法糖,因为一切都是一个表达式。
def write_code(number_of_errors)
  if number_of_errors > 1
     mood = "Ask me later"
  else
     mood = "No Problem"
  end  
  puts "### mood = #{mood}"
end
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