让我先说一下我对Ruby的新手。我正在经历几个练习,编写我自己的一些可枚举函数的版本。一切都很好,直到有点停止工作。我认为我没有改变任何东西。我的功能如下:
def my_all?
return false unless block_given?
for i in self
if !yield(i)
return false
end
end
return true
end
我将其称为如下:
arr = [1,2,3,4]
print arr.my_all? do |num|
num == num
end
这应该返回true,因为每个num显然等于它自己。但是我得到了错误的返回值。经过一些捣乱后,我发现红宝石没有检测到传递给my_all的do ... end块?方法(block_given?返回false)。如果我将do..end块更改为单行括号块,则该方法可以工作,如下所示:
{ |num| num == num}
有人可以告诉我在do..end版本上我做错了什么吗?感谢
答案 0 :(得分:0)
您可能希望查看iterators,而不是使用for
构造。
所以使用.each
看起来像是:
def my_all?
return false unless block_given?
self.each do |item|
unless yield(item)
return false
end
end
return true
end
我还更改了if !
unless
,因为它读得更好(只是不要unless
使用else
> _<)