Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在reduce的这个广义ruby方法中测试Truthy和Falsy?_Ruby_Reduce - Fatal编程技术网

如何在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编写一个通用方法”这项任务是否能够很好地判断一个仅仅包装原生Ruby
reduce
的解决方案。第三,如果您给出错误,最好知道是什么输入导致了错误(例如,我不知道为什么“我自己的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
。见和。