ruby - 如何初始化散列以便我可以在方法中使用它?

标签 ruby hash

奇怪的是,我在互联网上的任何地方都找不到任何相关信息。

我有一个类方法,它应该向散列中添加一些东西。例如:

def add_file(name, file)
  @files[name] = file
end

如果我以相同的方法使用 @files = Hash.new 初始化散列,每次我尝试向其中添加内容而不是向其中添加内容时,它都会生成一个全新的散列。但是当我将初始化移出类主体本身的方法时,它会出现错误:

in 'add_file': undefined method '[]=' for nil:NilClass (NoMethodError)

那么我该如何初始化散列,以便以后可以在其他方法中使用它。

请保持解释简单,我是新手。谢谢!

最佳答案

不会总是检查add/etc 方法中是否存在散列。

这需要始终检查任何需要它的散列。

如果该类是文件存储的包装器,则只有在实例化时创建它才有意义,例如,

class SomeClass
  def initialize
    @files = {}
  end

  def add_file(name, file)
    # Etc.
  end
end

它在类主体中创建哈希失败,因为它在,而不是实例,例如,

class NotWhatYouExpect
  @foo = "bar"
end

@foo 是一个实例变量;它属于 NotWhatYouExpect 而不是它的实例

关于ruby - 如何初始化散列以便我可以在方法中使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26845406/

相关文章:

javascript - rails : Updating quantities in shopping cart

python - Ruby 是否支持条件正则表达式

ruby-on-rails - 别名_方法 : stack level too deep

ruby-on-rails - 强参数允许嵌套属性的所有属性

perl - 在不遍历整个哈希的情况下在子哈希中查找键

ruby-on-rails - 横向扩展 : how to handle communication between Ruby on Rails applications?

c# - 无论顺序如何,获取字符串列表的哈希值

python - Python 中的 CARP 哈希

java - 更改 sha 256 更新的顺序更改值

javascript - 在 Bacon.js 中使用变量作为 EventStream 或 Property