gpt4 book ai didi

ruby - IRB 和脚本中的 TOPLEVEL_BINDING 区别

转载 作者:数据小太阳 更新时间:2023-10-29 07:25:26 24 4
gpt4 key购买 nike

如果我输入以下代码:

a = 42    
p TOPLEVEL_BINDING.local_variable_defined?(:a)

在文件“rubyScratch.rb”中使用 ruby​​

ruby rubyScratch.rb

我明白了

true

但是在 irb 中我得到了

2.3.1 :001 > a = 42
=> 42
2.3.1 :002 > TOPLEVEL_BINDING.local_variable_defined?(:a)
=> false

为什么会有这种差异?

最佳答案

这是因为 irb 命令(无论如何在我的系统上)运行一个小的 ruby​​ 脚本,如下所示:

#!/usr/bin/env ruby
#
# irb.rb - interactive ruby
# $Release Version: 0.9.6 $
# $Revision: 40560 $
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
#

require "irb"

IRB.start(__FILE__)

因此,TOPLEVEL_BINDING 是此脚本而不是您的 IRB 上下文。

在寻找更多信息时,我遇到了 this short article其中指出:

It is, as its name suggest, the Binding of your script's main scope:

a = 42
p binding.local_variable_defined?(:a) # => true
p TOPLEVEL_BINDING.local_variable_defined?(:a) # => true

def example_method
p binding.local_variable_defined?(:a) # => false
p TOPLEVEL_BINDING.local_variable_defined?(:a) # => true
end

example_method

总而言之,TOPLEVEL_BINDING 是当前上下文中由 Ruby VM 运行的第一个脚本的绑定(bind)。运行 IRB 时,该脚本是启动 IRB session 的脚本。

关于ruby - IRB 和脚本中的 TOPLEVEL_BINDING 区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52525436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com