这可能是一个愚蠢的问题,但我的rails应用程序开始受到这种代码风格的困扰:
def return_my_object
@object = get_object
some_function_work(@object)
return @object
end
是否存在摆脱或避免return @object
代码的一般做法或方法?到目前为止,我无法想到任何事情,它似乎是残酷的代码。
答案 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 }