我的代码:
class Dictionary
def initialize
hash = {}
end
key_value = "settings.conf"
def add(key_value)
key_value.each do |key, value|
hash[key] = value
end
end
for key in hash.keys()
print key, "/", hash[key], "\n"
end
end
我收到以下错误:
1.rb:11:在
<class:Dictionary>': undefined method
键中为665341102:Fixnum(NoMethodError)来自1.rb:1:在''
知道这里的错误是什么吗?
答案 0 :(得分:0)
您可能希望将hash
初始化为实例变量,即@hash
,以便在同一类的其他方法中使用它。
目前在hash
方法下定义的initialize
是常规方法,因此其范围仅限于该方法。当您尝试在方法add
下访问它时,上面的初始化超出了此范围,因此它在主对象上调用Object#hash
方法,这是一个fixnum:
def initialize
@hash = {}
end
和
def add(key_value)
key_value.each do |key, value|
@hash[key] = value
end
end
答案 1 :(得分:0)
正如其他人所建议的那样,不要使用hash作为变量,因为事实证明它是属于Object类的主对象的方法,作为返回Fixnum。我想建议一些更改,以使其工作: -
以下是上面列出的一些更改的示例 -
class Dictionary
def initialize
@temp = {}
# it assigns just the file name not the absolute/relative path to the file
@key_value = "settings.conf"
end
def add(key_value)
# modify this method to read data from the file
@key_value.each do |key, value|
@temp[key] = value
end
end
def display_temp
for key in @temp.keys
print key, "/", @temp[key], "\n"
end
end
end
答案 2 :(得分:0)
这个怎么样:
配置:
$ cat config.yml
key1: value1
key2: value2
代码:
$ cat ruby_example.rb
require 'yaml'
class Config
attr_reader :val1, :val2
private
def initialize(file)
config_from_file = YAML.load_file(file)
@val1 = config_from_file['key1']
@val2 = config_from_file['key2']
end
end
conf = Config.new('config.yml')
puts conf.val1
puts conf.val2