- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
为什么 local_variables
返回尚未分配的局部变量(在调用 local_variables
之后分配)?
a = 2
@aa = 1
# a = b # this will raise an error.
puts "local: #{ local_variables }"
puts "instance: #{ instance_variables }"
b = 2
@bb = 2
puts "local: #{ local_variables }"
puts "instance: #{ instance_variables }"
结果:
local: [:a, :b]
instance: [:@aa]
local: [:a, :b]
instance: [:@aa, :@bb]
我期望的是像 instance_variables
这样的行为,它只返回当时已经分配的变量。
最佳答案
Kernel#local_variables
列出当前范围内的所有局部变量,包括那些可能尚未赋值的局部变量。 MRI解析每个作用域中的局部变量并在代码本身(例如下面的 puts local_variables.inspect
)运行之前声明它们,因此即使在那些之前调用 local_variables
时它们也会出现变量已定义
但请注意,defined?
仍会为调用 local_variables
时尚未分配给的变量返回 nil
:
$ cat /tmp/locals
#!/usr/bin/env ruby
a = 5
puts local_variables.inspect
puts defined?(a)
puts (defined?(b) || "[undefined]")
b = 10
puts defined?(b)
def foo
c = 15
puts local_variables.inspect
d = 20
end
foo
$ ruby /tmp/locals
[:a, :b]
local-variable
[undefined]
local-variable
[:c, :d]
关于ruby - 为什么 local_variables 会返回尚未分配的局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15676360/
在使用临时变量进行研发时,我遇到了数据库的异常行为。为了充分说明我的问题,我将共享表架构及其数据。 这些是我的表格: CREATE TABLE category ( categoryId INT
只是好奇为什么我不能从“local_variables”数组中删除已声明的局部变量。 例子: x=1 myarr = local_variables.clone p local_variables =
我正在查看 ruby 内核文档并看到了这个方法: a = 2 local_variables # => [:a, :_] 为什么它返回 :a 而不是 a?我以为“:”是为符号保留的,但符号 :a
我想创建自己的注释来注释一些局部变量。写注解不是问题,问题是在运行时获取它们的信息。我只能从带注释的方法或方法参数中获取一些信息,而不能从局部变量中获取。有没有办法得到它? 我自己的注解是这样的: p
为什么 local_variables 返回尚未分配的局部变量(在调用 local_variables 之后分配)? a = 2 @aa = 1 # a = b # this will raise a
class Foo def bar @instance_variable = [['first']] # make a duplicate object with the :dup
我正在使用 ruby 1.8.7 (2011-12-28 patchlevel 357) [i686-darwin11.2.0]我正在玩 Kernet::eval 方法。 The binding
我在 Arch Linux 上使用这个版本的 Ruby。我还尝试了 ruby 1.9 中的第一个代码片段,结果相同。 ruby -v ruby 2.1.0p0 (2013-12-25 revisi
我是一名优秀的程序员,十分优秀!