我正在尝试引用另一个文件中写的哈希,并尝试:
require './filewithhash' #this file has hash
puts name_hash['somename'] #just trying access by the index
并且未定义局部变量或方法错误。
答案 0 :(得分:1)
问题是当在ruby中需要文件时,局部变量超出范围。因此,在所需文件中定义的任何局部变量将在以后 时可用。
解决方案:
NAME_HASH
)$name_hash
)@name_hash
)如果程序非常简单,我会选择选项3.但如果它想要增长,1是你最好的选择。
答案 1 :(得分:0)
Ruby中的要求不仅仅像在PHP中那样内联文件;每个文件都有自己的范围。也就是说,文件中的代码将在一个范围内执行,这意味着所有局部变量都被约束到该文件的范围,并且在其外部不可见。
为了在当前范围内执行文件,您必须使用当前绑定对其进行评估:
file = "file_with_hash.rb"
File.open(file) {|f| eval f.read, binding, file }
这是一个坏主意,你不应该这样做,除非你知道你在做什么以及为什么。相反,您应该将该哈希公开为常量的成员(超出文件范围):
# foo.rb
module Foo
PROGRAMMER_WORDS = {foo: 1, bar: 2, baz: 3}
...
end
# another file
require 'foo'
Foo::PROGRAMMER_WORDS # => {:foo=>1, :bar=>2, :baz=>3}