我创建了自己的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