0

有时我需要保留变量的原始值,做一些事情然后恢复它的原始值,如下所示:

def method
  original_value = @variable
  @variable = true

  result = # Do stuff

  @variable = original_value
  result
end

Ruby 中是否有某种语言结构可以让我做得更简单?

我试图搜索这个,但我真的想不出任何可搜索的搜索词。我设法通过传递当前绑定然后使用 eval 在原始上下文中保留原始值来为其编写自己的解决方案:

def preserve_value(var, bind)
  eval "lksdflkjsdlkfjdslkfjsdlkfj123214343245435324 = #{var}", bind
  result = yield
  eval "#{var} = lksdflkjsdlkfjdslkfjsdlkfj123214343245435324", bind

  result
end

def method
  preserve_value :@variable, binding do
    @variable = 3
    # Do stuff
  end
end

有没有更好的选择来实现这一目标?

4

0 回答 0