【问题标题】:implicit return with variable assignment带变量赋值的隐式返回
【发布时间】:2021-08-13 21:01:02
【问题描述】:

根据最流行的风格指南:

# this a bad
def some_function
  return "some value"
end

# this is good
def some_function
  "some value"
end

我正在使用 Ruby on Rails,我经常看到这样的代码,这些样式指南没有提到:

def some_function(x)
  result = some_calculations(x)
  result
end

我已经尝试过了,它有效,所以我不明白在下一行赋值后显式返回变量的基本原理:

# this works as well
def some_function(x)
  result = some_calculations(x)
end

【问题讨论】:

  • 当我们可以直接返回语句时,为什么我们需要分配给一个变量。当方法的最后一行有语句并且该语句的结果应该是 return 时,我们不需要将其存储在变量中,除非它是实例变量并在其他方法中使用。在您的示例中,您需要将其分配给一个变量。您可能需要一个变量,以防在将值分配给变量后运行其他指令并在执行其他操作后返回该变量。
  • 感谢您的回复!通过执行其他操作,您的意思是在不重新分配变量的情况下更改变量的值? @HirenBhalani
  • 是的,并且可能会根据该变量找出其他东西而不更改它,但返回该变量。
  • @sava128 :根据您的警告级别,您的最后一个解决方案会警告您 result 已分配,但未使用。如果它是块或函数中的最后一条语句,我看不出分配给局部变量的任何目的。

标签: ruby-on-rails ruby string


【解决方案1】:

实际上根本没有分配局部变量的理由,因为它立即超出范围。所以写方法的“正确方式”其实是:

def some_function(x)
  some_calculations(x)
end

即使你对结果做了什么操作,你也可以使用thentap 而不是分配一个局部变量:

def some_function(x)
  some_calculations(x).then do |value|
    value ** 2
  end
end

【讨论】:

  • alias_method :some_function, :some_calculations
  • 感谢您的回复!你说的很有道理。
猜你喜欢
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
  • 2012-09-08
  • 2017-12-07
  • 2016-02-03
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
相关资源
最近更新 更多