-2

Say I have two hashes that share one key (for example "foo") but different values. Now I want to create a method with one attribute that puts out the value of the key depending on which hash I chose as attribute. How do I do that?

I have tried:

def put_hash(hash)
   puts hash("foo")
end

but when I call this function with a hash it gives me the error below:

undefined method `hash' for main:Object (NoMethodError) 
4

3 回答 3

1

您需要使用以下方式访问该值[]

puts hash["foo"]

否则 Ruby 认为您正在尝试使用 调用方法(),并且您会看到错误,因为hash在该范围内没有调用方法。

于 2013-06-28T15:35:47.563 回答
1

你有没有尝试过:

def put_hash(hash)
   puts hash["foo"]
end

或者更好:

def put_hash(hash)
   puts hash[:foo]
end

Ruby 将值存储在哈希中,如下所示:

{ :foo => "bar" }

或者

 { "foo" => "bar" }

取决于您使用的是 aSymbol还是 aString

要访问它们,您需要[]调用Hash class

Ruby Docs总是一个很好的起点。

于 2013-06-28T15:37:37.733 回答
0

写成

def put_hash(hash)
   puts hash["foo"]
end
h1 = { "foo" => 1 }
h2 = { "foo" => 2 }
put_hash(h2) # => 2

看这里Hash#[]

元素引用——检索与键对象对应的值对象

于 2013-06-28T15:36:03.790 回答