Ruby proc 中可以改变外部变量的值吗?

tablecell · 2021年10月04日 · 最后由 tablecell 回复于 2021年10月05日 · 269 次阅读
def call_proc(proc)
  count = 500
 #   proc.call count
  count.tap { |count|
    puts count
    proc.call count
    puts count
  }

  puts count
end

myproc = Proc.new { |&param|
  param = 200

  "balabala"
}

call_proc(myproc)

除了 proc 最后返回一个包含 param 的 array 还有其他方法吗?

param = 200 给 param 赋予了一个新的 object,所以没有改变 count 的值。

Integer 类型不能改变自身,要用一些可以改变自身的类型,例如 Hash 或者自己创建一个类:

data = { count: 500 }

proc = Proc.new { |params|
  params[:count] = 200
}

proc.call(data)

puts data[:count]
#=> 200

可以用 set_trace_func 获取外部 binding,然后 eval

mizuhashi 回复

加了这个 print 就停不下来,只是想在 call_proc 中使用,对其他代码无影响

需要 登录 后方可回复, 如果你还没有账号请 注册新账号