尝试使用.reduce如果存在真实值,则返回true;否则,如果存在falsey值,则返回false

时间:2019-06-28 16:40:08

标签: ruby methods reduce

尝试使用.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

任何帮助/解释将不胜感激!

1 个答案:

答案 0 :(得分:1)

您需要了解“真实” /“虚假”与成为true / false之间的区别。

Ruby会将nilfalse以外的所有内容视为真实,因此您可以编写:

puts 1 if 1

它将放1。

在此作业中,您被要求使用真实性,因此,您可以使用红宝石使用双重否定true来代替红宝石来代替!!

pry> [1, "2", nil, true, false].map{|e| !!e}
=> [true, true, false, true, false]

还要注意,reduce中的一个块接受两个参数-一个是当前元素,另一个是累加器-对先前元素进行求和的结果。在代码块中同时使用两者,否则,您将仅根据数组的最后一个元素返回结果。