如何在reduce的这个广义ruby方法中测试Truthy和Falsy?
这是红宝石课程。我们被要求写一份概括的报告 降低成本的方法如何在reduce的这个广义ruby方法中测试Truthy和Falsy?,ruby,reduce,Ruby,Reduce,这是红宝石课程。我们被要求写一份概括的报告 降低成本的方法 def my_own_reduce(数组,起点=0) final|u total=array.reduce(起点){| sum,num | sum+num} 结束 以下是我收到的错误消息: # my own reduce returns a running total when given a starting point # my own reduce returns true when all values are truth
def my_own_reduce(数组,起点=0)
final|u total=array.reduce(起点){| sum,num | sum+num}
结束
以下是我收到的错误消息:
# my own reduce returns a running total when given a starting point
# my own reduce returns true when all values are truthy
# my own reduce returns false when any value is false
# my own reduce returns true when a truthy value is present
# my own reduce returns false when no truthy value is present
Ruby中的所有值都是真实的,除了
nil
和false
如果要根据非布尔对象的真实性将其转换为布尔对象,可以使用“双重爆炸”运算符,如下例所示:
some_value = 42
some_other_value = 0
yet_another_value = nil
puts !!some_value # => true
puts !!some_other_value # => true
puts !!yet_another_value # => false
要在条件下使用对象的真实性,只需像使用布尔值一样使用它们。像这样:
def my_method(my_argument)
if my_argument
'Received a truthy argument'
else
'Received a falsy argument'
end
end
puts my_method(0) # => 'Received a truthy argument'
puts my_method(nil) # => 'Received a falsy argument'
puts my_method(false) # => 'Received a falsy argument'
我希望这能有所帮助,但是如果没有更多关于你问题背景的信息,我不确定我能告诉你更多。您发布的错误消息有点不清楚,甚至相互矛盾
条件“给定起点时”是否表示默认值0以外的起点
条件“any value is false”和“a truthy value is present”可以很容易地同时满足,给定的数组可以非常简单地包含其中一个。在这种情况下,哪个条件应该优先?首先,如果您硬编码
+
,它不是“一般化的”。其次,我怀疑“为reduce编写一个通用方法”这项任务是否能够很好地判断一个仅仅包装原生Rubyreduce
的解决方案。第三,如果您给出错误,最好知道是什么输入导致了错误(例如,我不知道为什么“我自己的reduce在给定起点时返回一个运行总数”是一个错误,我想这是期望的行为)。我相信您被要求创建一个实例方法Enumerable#my#u own_reduce
,其行为与Enumerable#reduce
相同。由于reduce
可选地接受一个参数,因此它必须看起来像模块可枚举;def my_own_reduce(obj=nil);结束
。对于新手来说,这是一项非常重要的任务。可能您的方法正在针对看不见的表达式进行测试。第二个“当所有值都为真时返回true
”,可能是,例如,[1,2,nil,'cat']。见。。。。。。第四个测试可能是:[nil,'cat',false].my_own_reduce(false){| t_或| f,e | t_或| f | e}
,所需返回值为true
。见和。