yod*_*lex 13 ruby oop warnings dynamic
我正在尝试编写一个程序,根据从文件中读取的配置动态定义ruby类.我知道我可以使用Class.new来做到这一点.这是一个示例程序:
x = [1,2,3]
Test = Class.new do
@@mylist = x
def foo
puts @@mylist
end
end
Test.new.foo
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到以下输出(与ruby 1.9.3p0一起运行):
c:/utils/test.rb:4: warning: class variable access from toplevel c:/utils/test.rb:7: warning: class variable access from toplevel 1 2 3
有谁知道是什么导致这些警告以及我如何摆脱它们?
我已经尝试更换线路了
@@mylist = x
Run Code Online (Sandbox Code Playgroud)
有了这个
class_variable_set(:@@mylist, x)
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,我得到了这个错误:
c:/utils/test.rb:7: warning: class variable access from toplevel c:/utils/test.rb:7:in `foo': uninitialized class variable @@mylist in Object (NameError) from c:/utils/test.rb:11:in `'
提前致谢!
mcu*_*ulp 19
这不是你认为它正在做的事情.由于您没有使用class
关键字创建类,因此您的类变量正在设置Object
,而不是Test
.这种影响非常大,这就是Ruby警告你的原因.类变量在祖先之间共享,而对象通常从中继承Object
.
只是要删除此警告,您应该使用class_variable_set
方法:
x = [1,2,3]
Test = Class.new do
class_variable_set(:@@mylist, x)
def foo
puts @@mylist
end
end
Run Code Online (Sandbox Code Playgroud)