Ruby - 从 .find 中恢复但未找到任何内容
Ruby - recovering from .find not finding anything
$array_hash = [
{
first: "John",
last: "Smith",
role: "Boss"
},
{
first: "Jane",
last: "Doe",
role: "Worker"
}]
def find_employees_role(name)
name = name.split(" ")
result = $array_hash.find do | e |
e[:first] == name[0] && e[:last] == name[1] #line16
end[:role]
result ||= "Not available"
end
find_employees_role("Joe Smith") #line 22
find_employees_role("John Smith") #"Boss"
Error: undefined method `[]' for nil:NilClass
(repl):16:in `find_employees_role'
(repl):22:in `initialize'
这是一个包含哈希的数组。
我的目标是编写一个方法,允许我传递一个像 "John Smith" 这样的名字作为参数并取回那个人的角色,无论是 "Boss" 还是 "Worker."
如果名字不在数据库中,我希望它return "Not available."
我试着用我的
写
result ||= "Not available"
当我传递给方法的名称实际存在时,代码会按预期工作,但如果我尝试传递一个不存在的名称,它甚至不会按照我的预期进行。相反,它 return 指出了错误。
我认为错误来自 [0][:role] 在未定义的对象上被调用,因此没有可用的数组方法。但是,我不确定如何解决这个问题。
请随意批评我的代码中与当前问题无关的任何其他方面。我的耳朵是开着的。
问题是您正在尝试查找 [:role]
,即使 find
失败并且 returns nil
。
尝试将查找和散列查找拆分为两个语句,以便您可以先检查 nil。
entry = hash.find do |e| ... end
result = entry ? entry[:role] : "not available"
$array_hash = [
{
first: "John",
last: "Smith",
role: "Boss"
},
{
first: "Jane",
last: "Doe",
role: "Worker"
}]
def find_employees_role(name)
name = name.split(" ")
result = $array_hash.find do | e |
e[:first] == name[0] && e[:last] == name[1] #line16
end[:role]
result ||= "Not available"
end
find_employees_role("Joe Smith") #line 22
find_employees_role("John Smith") #"Boss"
Error: undefined method `[]' for nil:NilClass
(repl):16:in `find_employees_role'
(repl):22:in `initialize'
这是一个包含哈希的数组。
我的目标是编写一个方法,允许我传递一个像 "John Smith" 这样的名字作为参数并取回那个人的角色,无论是 "Boss" 还是 "Worker."
如果名字不在数据库中,我希望它return "Not available."
我试着用我的
写result ||= "Not available"
当我传递给方法的名称实际存在时,代码会按预期工作,但如果我尝试传递一个不存在的名称,它甚至不会按照我的预期进行。相反,它 return 指出了错误。
我认为错误来自 [0][:role] 在未定义的对象上被调用,因此没有可用的数组方法。但是,我不确定如何解决这个问题。
请随意批评我的代码中与当前问题无关的任何其他方面。我的耳朵是开着的。
问题是您正在尝试查找 [:role]
,即使 find
失败并且 returns nil
。
尝试将查找和散列查找拆分为两个语句,以便您可以先检查 nil。
entry = hash.find do |e| ... end
result = entry ? entry[:role] : "not available"