ruby DRY返回值?

时间:2014-08-14 21:11:23

标签: ruby-on-rails ruby return dry

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

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

是否存在摆脱或避免return @object代码的一般做法或方法?到目前为止,我无法想到任何事情,它似乎是残酷的代码。

1 个答案:

答案 0 :(得分:5)

您可以使用Object#tap稍微简化该代码。 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实例,该块将在块完成时返回。在块内部,我们改变了Hash,它反映在分配给@object的结果中。

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