Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何在该散列上生成与键对应的值,默认情况下为nil_Ruby - Fatal编程技术网

Ruby 如何在该散列上生成与键对应的值,默认情况下为nil

Ruby 如何在该散列上生成与键对应的值,默认情况下为nil,ruby,Ruby,我在Ruby中的哈希初学者练习中遇到了一些障碍。我有以下问题需要解决: 创建一个方法调用read_from_hash,它接受两个参数。第一个参数是散列,第二个是键。它们一起使用时,要么在该散列上生成一个与键对应的值,要么默认为nil。将这两个参数结合使用即可实现此目的 这是我的密码: def read_from_hash(hash, key) hash = {key => "value"} hash(key) end 以下是错误: Failure/Error: expe

我在Ruby中的哈希初学者练习中遇到了一些障碍。我有以下问题需要解决:

创建一个方法调用read_from_hash,它接受两个参数。第一个参数是散列,第二个是键。它们一起使用时,要么在该散列上生成一个与键对应的值,要么默认为nil。将这两个参数结合使用即可实现此目的

这是我的密码:

def read_from_hash(hash, key)
  hash = {key => "value"}
  hash(key)
end
以下是错误:

     Failure/Error: expect(read_from_hash({name: 'Steve'}, :name)).to eq('Steve')

     ArgumentError:
       wrong number of arguments (given 1, expected 0)

你想要的只是:

def read_from_hash(hash, key)
  hash[key]
end
h = {a: 1, b: 2}

read_from_hash(h, :a)
#=> 1
read_from_hash(h, :c)
#=> nil
或者举个例子:

read_from_hash({name: 'Steve'}, :name)
#=> 'Steve'
您当前的代码:

hash = {key => "value"} 
创建一个新的
hash
变量,覆盖通过参数传入的变量,此时:

hash(key) 

您正试图使用常规括号而不是括号
[]
使用键
访问元素的值。因此,实际发生的情况是,您正在调用一个
#hash
方法,并将
变量作为参数传递给它。

hash访问使用
[]
,而不是
()
,它试图调用一个方法。除了@DaveNewton的注释之外:该方法
hash(…)
正在尝试调用is–一种可用于所有对象的方法。该方法不接受参数,因此出现了
ArgumentError
。请阅读“,”
hash(key)
#尝试访问元素的值…”-我认为如果说它尝试调用名为
hash
的方法会更简洁。Ruby不知道你打算做什么。@Stefan编辑,我希望现在更清楚了。谢谢你的建议