Ruby 正在尝试使用.reduce返回true(如果有truthy值),否则返回false(如果有false值)

Ruby 正在尝试使用.reduce返回true(如果有truthy值),否则返回false(如果有false值),ruby,methods,reduce,Ruby,Methods,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

正在尝试使用。减少用于课程课程的。。。以下是他们希望我的方法执行的操作:

  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

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

你需要理解真假与真假之间的区别

Ruby会将所有不是零或假的东西都作为truthy进行评估,因此您可以编写:

puts 1 if 1
它将把1

在本作业中,您被要求使用真实性,因此,您可以使用ruby,使用双重否定来进行转换,而不是将其与真实进行比较!!:


还要注意,reduce中的一个块接受两个参数,一个是当前元素,另一个是累加器,这是在前面的元素上交互的结果。在块中同时使用这两个元素,否则返回的结果将仅取决于数组的最后一个元素。

什么,另一个reduce问题?天文学家宣布减缩周了吗也来自同一个用户。一个是当前元素,另一个是累加器-顺便说一句,这是另一种方式。你在用对象思考每个_:我仍然不明白,但这只是意味着我必须回去学习更多。仍然不明白reduce在做什么来返回true(如果是真的)和false(如果是假的)。谢谢though@RoderickCardenas当前位置我想单击确实需要一些时间。reduce或fold(在某些其他语言中称为reduce或fold)将集合折叠/减少/折叠为单个值。您只需要提供累加器增量更新的逻辑。要点:增量。遗憾的是,&&在ruby中不是一个方法。否则这会起作用:source_array.reduce&:“&&&&&&@SergioTulentsev如果你处理的是真实的布尔值,而不是真的和假的,那么总是会有数组_的布尔值。inject:&@muistooshort:也适用于数组,很漂亮:@SergioTulentsev source_array.all@拍了拍额头,当然了!但不使用reduce:
pry> [1, "2", nil, true, false].map{|e| !!e}
=> [true, true, false, true, false]