【发布时间】:2015-05-27 17:14:04
【问题描述】:
让我先说我对 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 显然都等于它自己。但是我得到一个错误的返回值。经过一番摸索后,我发现 ruby 没有检测到传递给 my_all 的 do...end 块?方法(block_given?返回假)。如果我将 do..end 块更改为单个行括号块,则该方法确实有效,如下所示:
{ |num| num == num}
有人可以告诉我关于 do..end 版本我做错了什么吗?谢谢
【问题讨论】:
-
由于优先级,该块正在传递给
print。添加括号:print (arr.my_all? do |num| ... end). -
就是这样,谢谢!
标签: ruby