【问题标题】:ruby DRY return value?红宝石 DRY 返回值?
【发布时间】:2014-08-14 21:11:22
【问题描述】:

这可能是一个愚蠢的问题,但我的 rails 应用程序开始受到这种代码风格的困扰:

def return_my_object
  @object = get_object
  some_function_work(@object)
  return @object
end

是否有摆脱或避免return @object 代码的一般做法或方法?到目前为止,我什么都想不出来,而且看起来像是杂乱无章的代码。

【问题讨论】:

  • Ruby 有隐式返回,这意味着只有@object 的最后一行将返回预期值。此外,如果some_function_work(@object) 返回@object,您可以省略方法中的最后一行代码。
  • 哈哈是的,谢谢你的澄清!我只是想明确表示我想最后返回@object

标签: ruby-on-rails ruby return dry


【解决方案1】:

您可以使用Object#tap 稍微简化该代码。点击将对象让给块,并在块完成后返回对象。因此,它没有@object 设置为some_function_work 的值,而是设置为get_object 的结果。但是,如果some_function_work 改变@object,这显然会反映出来,因为它是同一个实例。

即:

def return_my_object
  @object = get_object.tap { |o| some_function_work(o) }
end

方法的最后一个表达式 (@object) 也将被返回。

下面是一个最小示例,其中{}.tap 为块生成一个新的Hash 实例,该实例将在块完成时返回。在块内部,我们更改了哈希值,这反映在分配给@object 的结果中。

@object = {}.tap { |hash| hash[:key] = :value }
# { :key => :value }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多