尝试使用.reduce课程,这是他们希望我的方法做的事情:
describe "reduce_to_all_true returns true when all values are truthy" do
it "reduces correctly" do
source_array = [1, 2, true, "razmatazz"]
expect(reduce_to_all_true(source_array)).to be_truthy
end
end
describe "reduce_to_all_true returns false when any value is false" do
it "reduces correctly" do
source_array = [1, 2, true, "razmatazz", false]
expect(reduce_to_all_true(source_array)).to be_falsy
end
end
我很难理解这一点...这是我的代码:
def reduce_to_all_true(source_array)
source_array.reduce { |beTrue| if beTrue == true; p true; else p false end}
end
我得到的错误:
1) my own reduce-like methods reduce_to_all_true returns true when all valuesare truthy reduces correctly
Failure/Error: expect(reduce_to_all_true(source_array)).to be_truthy
expected: truthy value
got: false
任何帮助/解释将不胜感激!
答案 0 :(得分:1)
您需要了解“真实” /“虚假”与成为true
/ false
之间的区别。
Ruby会将nil
或false
以外的所有内容视为真实,因此您可以编写:
puts 1 if 1
它将放1。
在此作业中,您被要求使用真实性,因此,您可以使用红宝石使用双重否定true
来代替红宝石来代替!!
:
pry> [1, "2", nil, true, false].map{|e| !!e}
=> [true, true, false, true, false]
还要注意,reduce
中的一个块接受两个参数-一个是当前元素,另一个是累加器-对先前元素进行求和的结果。在代码块中同时使用两者,否则,您将仅根据数组的最后一个元素返回结果。