为 Ruby 创建我自己的可枚举方法my_none?



我创建了自己的Enumerable方法my_none?。它给了我 lint 错误:

将嵌套在else中的if转换为elsif

此外,两个测试用例不起作用。谁能帮我解决这些问题?

module Enumerable
def my_each
i = 0
while i < size
yield self[i]
i += 1
end
end
def my_none?
my_each do |item|
if block_given?
return false if yield item
else
return false if item
end
end
true
end
end
%w{ant bear cat}.my_none? { |word| word.length == 5 } #=> true
%w{ant bear cat}.my_none? { |word| word.length >= 4 } #=> false
[].my_none?                                           #=> true
[nil].my_none?                                        #=> true
[nil, false].my_none?                                 #=> true
[nil, false, true].my_none?                           #=> false

以下两个测试用例不起作用:

%w{ant bear cat}.my_none?(/d/)                        #=> true > gives me wrong no of argument given 1 expected 0
[1, 3.14, 42].my_none?(Float)                         #=> false > gives me wrong number of argument 

my_none?方法,正如你定义的那样,不接受任何参数。它只能接受阻止。

我想你的意思是:

%w{ant bear cat}.my_none?{|e| e =~ /d/ }
[1, 3.14, 42].my_none?(&:to_f)

&:to_f是创建 Proc 的一种方法 - 有关详细信息,请参阅此问题。

要消除 lint 错误,您可以将my_none?实现更改为:

def my_none?
my_each do |item|
return false if block_given? && yield(item) || !block_given? && item
end
true
end

相关内容

  • 没有找到相关文章