你如何 return 从散列数组 Ruby 中获取名称 TDD
How do you return a name from an array of hashes Ruby TDD
首先我是编程新手,这就是问题
这是规范
require 'minitest/autorun'
require_relative '../pet_shop'
class TestPetShop < Minitest::Test
def setup
@customers = [{
name: "Craig",
pets: [],
cash: 1000
}, {
name: "Zsolt",
pets: [],
cash: 50
}]
@new_pet = {
name: "Bors the Younger",
pet_type: :cat,
breed: "Cornish Rex",
price: 100
}
@pet_shop = {
pets: [{
name: "Sir Percy",
pet_type: :cat,
breed: "British Shorthair",
price: 500
}, {
name: "King Bagdemagus",
pet_type: :cat,
breed: "British Shorthair",
price: 500
}, {
name: "Sir Lancelot",
pet_type: :dog,
breed: "Pomsky",
price: 1000,
}, {
name: "Arthur",
pet_type: :dog,
breed: "Husky",
price: 900,
}, {
name: "Tristan",
pet_type: :dog,
breed: "Basset Hound",
price: 800,
}, {
name: "Merlin",
pet_type: :cat,
breed: "Egyptian Mau",
price: 1500,
}],
admin: {
total_cash: 1000,
pets_sold: 0,
},
name: "Camelot of Pets"
}
end
def test_find_pet_by_name__returns_pet
pet = find_pet_by_name(@pet_shop, "Arthur")
assert_equal("Arthur", pet[:name])
end
end
这是我的答案
def find_pet_by_name(shop)
pets = []
for pet in shop[:pets]
if pet[:name] == name
return pet
end
end
return pets
end
不断收到错误的参数数量错误,请记住我显然不知道自己在做什么,因为我是新编程。
您正在此处调用 find_pet_by_name(shop)
方法:
pet = find_pet_by_name(@pet_shop, "Arthur")
正如评论者所提到的,您在调用该方法时传递了 2 个参数:@pet_shop
和 "Arthur"
。但是您的方法定义只允许传入 1 个参数:shop
。所以你的方法调用应该是:
pet = find_pet_by_name(@pet_shop)
不需要传入 "Arthur",因为该方法不需要(或不允许)该信息。因此,您收到 'wrong number of arguments' 错误。
首先我是编程新手,这就是问题
这是规范
require 'minitest/autorun'
require_relative '../pet_shop'
class TestPetShop < Minitest::Test
def setup
@customers = [{
name: "Craig",
pets: [],
cash: 1000
}, {
name: "Zsolt",
pets: [],
cash: 50
}]
@new_pet = {
name: "Bors the Younger",
pet_type: :cat,
breed: "Cornish Rex",
price: 100
}
@pet_shop = {
pets: [{
name: "Sir Percy",
pet_type: :cat,
breed: "British Shorthair",
price: 500
}, {
name: "King Bagdemagus",
pet_type: :cat,
breed: "British Shorthair",
price: 500
}, {
name: "Sir Lancelot",
pet_type: :dog,
breed: "Pomsky",
price: 1000,
}, {
name: "Arthur",
pet_type: :dog,
breed: "Husky",
price: 900,
}, {
name: "Tristan",
pet_type: :dog,
breed: "Basset Hound",
price: 800,
}, {
name: "Merlin",
pet_type: :cat,
breed: "Egyptian Mau",
price: 1500,
}],
admin: {
total_cash: 1000,
pets_sold: 0,
},
name: "Camelot of Pets"
}
end
def test_find_pet_by_name__returns_pet
pet = find_pet_by_name(@pet_shop, "Arthur")
assert_equal("Arthur", pet[:name])
end
end
这是我的答案
def find_pet_by_name(shop)
pets = []
for pet in shop[:pets]
if pet[:name] == name
return pet
end
end
return pets
end
不断收到错误的参数数量错误,请记住我显然不知道自己在做什么,因为我是新编程。
您正在此处调用 find_pet_by_name(shop)
方法:
pet = find_pet_by_name(@pet_shop, "Arthur")
正如评论者所提到的,您在调用该方法时传递了 2 个参数:@pet_shop
和 "Arthur"
。但是您的方法定义只允许传入 1 个参数:shop
。所以你的方法调用应该是:
pet = find_pet_by_name(@pet_shop)
不需要传入 "Arthur",因为该方法不需要(或不允许)该信息。因此,您收到 'wrong number of arguments' 错误。