我在创建建立新哈希的方法时遇到问题。我知道声明哈希肯定更容易,但是我需要创建一个方法。这是我到目前为止所持有的,它不断产生错误信息。
def create_new(hash_name)
hash_name = Hash.new
end
这应该创建并清空哈希^
def add_item(hash_name, item_name, item_quantity)
hash_name[:item_name.to_sym] = item_quantity
end
我不断收到上述代码的错误消息^我正在尝试更新此哈希并使用方法添加新的键值对
p create_new("grocery_list")
这会创建一个新的空哈希^但是当我用下面的代码调用它时,哈希是未定义的
add_item(grocery_list, "pizza", "1")
p grocery_list
答案 0 :(得分:2)
如果你喜欢,你也可以把它变成一个班级。
class MyHash
attr_reader :hash
def initialize
@hash = Hash.new
end
def [](key)
self.hash[key]
end
def []=(key, value)
self.hash[key.to_sym] = value
end
end
grocery_list = MyHash.new
grocery_list['pizza'] = 1
> grocery_list.hash
=> {:pizza=>1}
答案 1 :(得分:1)
在create_new
方法中,您定义了一个hash_name
局部变量。除了方法体之外,此变量不存在于任何位置。这似乎让你感到困惑。
您可以通过以下方式更好地表达您的意图:
def create_new
Hash.new
end
def add_item(hash, key, value)
hash[key.to_sym] = value
end
为了达到你想要做的事情,你必须将你的方法的结果存储在某种变量中才能使用它:
grocery_list = create_new # grocery_list is now a local variable
add_item(grocery_list, 'pizza', 1)