我得到TypeError: no implicit conversion of String into Integer
无法弄清楚这里有什么问题。
require 'json'
h = '{"name":[{"first":"first ", "last":"last"}], "age":2}'
h = JSON.parse(h)
class C
def fullname(p)
first(p["name"]) + last(p["name"])
end
def age(p)
p["age"]
end
private
def first(name)
name["first"]
end
def last(name)
name["last"]
end
end
C.new.age(h) #=> 2
C.new.fullname(h) #=> TypeError: no implicit conversion of String into Integer
答案 0 :(得分:1)
h["name"]
的结果是name = [{"first" => "first ", "last" => "last"}]
,这是一个数组。您无法应用name["first"]
或name["last"]
。传递给数组的参数必须是整数。
答案 1 :(得分:1)
名称是一个数组,您有两个选择:
选项A:
为fullname指定数组的元素:
def fullname(elem)
first(elem) + last(elem)
end
并用
调用它C.fullname(p.first)
例如
选项B:
假设它始终是fullname
中数组的第一个元素def fullname(p)
name=p["name"].first
first(name) + last(name)
end
不要被Array.first混淆,Array.first是Array [0]和你的'first'函数
答案 2 :(得分:0)
"name"
是一个数组。 fullname(p)
应该阅读
first(p["name"][0]) + last(p["name"][0])