实施包括?建立 Ruby 杂货清单
Implementing Include? to build Ruby Grocery List
刚开始学习 Ruby,我正在尝试了解如何使用 .include? 构建一个Ruby 的杂货清单。具体来说,我的方法需要使用 2x 个参数,第一个 = 要添加的项目,第二个 = 杂货清单的数组。该方法需要向列表中添加新项目,并且还需要识别项目是否已包含在列表中。
def add_item!(item, list)
if [list].include?(item) == false
list << item
else [list].include?(item) == true
list
end
end
这是测试代码的 TDD:
describe "add_item!" do
it "adds an item to the end of the list" do
expect( add_item!("banana", ["orange"]) ).to eq(["orange", "banana"])
end
it "doesn't add an item if the list already has it" do
expect( add_item!("orange", ["orange"]) ).to eq(["orange"])
end
end
我的代码正在返回
["orange", "banana"]
在第一次测试中,但是
["orange", "orange"]
在第二次测试中。
我知道这是一个简单的挑战,但我不明白我是否使用了 .include?正确。
除了括号外,它看起来还不错。你不应该需要那些。此外,没有理由调用 list 或使用 else。
def add_item!(item, list)
if list.include?(item) == false
list << item
end
end
进一步审查,您为什么要通过 [orange]?您的方法将列表定义为您要查找的值。你不想通过列表吗?
list = []
add_item!("orange", list)
add_item!("bananna", list)
问题是,如果用方括号将数组括起来,它就会变成数组的数组。因此 include?
将 return false:
[['orange']].include('orange') # => false
这里有一个缩短代码的提示:
def add_item(item, list)
list.include?(item) ? list : list << item
end
您不需要使用括号。如果您已经将数组定义为变量,则只需使用它的名称即可。例如列表 = ["oranges", "bananas"]。 Ruby 已经知道列表是一个包含这些项目的数组,所以当您调用函数时:
def add_item!(item, list)
unless list.include?(item)
list << item
else
puts "Item already on the list"
end
end
这样代码看起来就不那么混乱了。 "Unless" 类似于 "IF" 语句,但它已经检查语句是否为假。在这个例子中,它检查列表是否已经包含项目,如果是(真),它跳到 "else",如果它为假(项目不在列表中)它运行代码,因此将项目添加到列表中。
总的来说一切都很好,只是去掉括号。
我也在学习Ruby,这是一门很棒的语言,祝你好运,不要放弃。
刚开始学习 Ruby,我正在尝试了解如何使用 .include? 构建一个Ruby 的杂货清单。具体来说,我的方法需要使用 2x 个参数,第一个 = 要添加的项目,第二个 = 杂货清单的数组。该方法需要向列表中添加新项目,并且还需要识别项目是否已包含在列表中。
def add_item!(item, list)
if [list].include?(item) == false
list << item
else [list].include?(item) == true
list
end
end
这是测试代码的 TDD:
describe "add_item!" do
it "adds an item to the end of the list" do
expect( add_item!("banana", ["orange"]) ).to eq(["orange", "banana"])
end
it "doesn't add an item if the list already has it" do
expect( add_item!("orange", ["orange"]) ).to eq(["orange"])
end
end
我的代码正在返回 ["orange", "banana"] 在第一次测试中,但是 ["orange", "orange"] 在第二次测试中。
我知道这是一个简单的挑战,但我不明白我是否使用了 .include?正确。
除了括号外,它看起来还不错。你不应该需要那些。此外,没有理由调用 list 或使用 else。
def add_item!(item, list)
if list.include?(item) == false
list << item
end
end
进一步审查,您为什么要通过 [orange]?您的方法将列表定义为您要查找的值。你不想通过列表吗?
list = []
add_item!("orange", list)
add_item!("bananna", list)
问题是,如果用方括号将数组括起来,它就会变成数组的数组。因此 include?
将 return false:
[['orange']].include('orange') # => false
这里有一个缩短代码的提示:
def add_item(item, list)
list.include?(item) ? list : list << item
end
您不需要使用括号。如果您已经将数组定义为变量,则只需使用它的名称即可。例如列表 = ["oranges", "bananas"]。 Ruby 已经知道列表是一个包含这些项目的数组,所以当您调用函数时:
def add_item!(item, list)
unless list.include?(item)
list << item
else
puts "Item already on the list"
end
end
这样代码看起来就不那么混乱了。 "Unless" 类似于 "IF" 语句,但它已经检查语句是否为假。在这个例子中,它检查列表是否已经包含项目,如果是(真),它跳到 "else",如果它为假(项目不在列表中)它运行代码,因此将项目添加到列表中。
总的来说一切都很好,只是去掉括号。
我也在学习Ruby,这是一门很棒的语言,祝你好运,不要放弃。