回答
因为这就是红宝石的工作原理。任何方法都可以通过一个块。如果需要,该方法的责任是检查block_given?
和yield
。
这是隐式块传递。当你声明一个块参数时,会发生一些不同的情况:块被转换为一个Proc对象,以便它可以像函数一样调用并作为参数传递。你不能用隐式块(AFAIK)来做到这一点。
def foo &block
block.call 3
bar block
end
# this method expects proc as a regular parameter (not a block), so you can pass
# a block in addition to it (if you so desire)
def bar block
block.call 4
end
foo do |x|
puts "this is #{x}"
end
# >> this is 3
# >> this is 4
“因为这就是红宝石的工作原理。”是的,那*就是我会用过的那个短语。不需要任何其他答案(或者对于其他答案)。 – matt 2013-03-18 04:03:25
@马特:不休息,答案是太短了一个答案:) – 2013-03-18 05:18:19
@SergioTulentsev是什么'高清富&block'和'高清酒吧block'之间的区别? – 2013-03-18 06:10:22
- 1. 没有定义“方块”为什么这个功能比较慢?
- 2. 为什么NodeJS核心模块没有TypeScript接口定义?
- 3. 接受列表作为类方法的参数:param - 名称“selected_fields”没有定义
- 4. 为什么PartialFunction中没有orElse方法接受全部函数?
- 5. 没有扩展方法“GetAwaiter”接受第一个参数
- 6. 有一个方法接受不同的对象作为参数
- 7. 为什么方法redirect()只接受grails 2.5.x的一个参数
- 8. 为什么Interlocked.Add中没有接受双倍参数的重载?
- 9. Ruby:类接受一个块?
- 10. 为什么方法'Arrays.asList()'不接受{“”,“”}类型的参数,但接受(“”,“”)?
- 11. 为什么UIComponent中的encodeXxx方法接受FacesContext参数?
- 12. 为什么Ruby块没有必要的参数?
- 13. 为什么requestAnimationFrame函数接受一个元素作为参数?
- 14. 为什么这个类的方法没有这个参数?
- 15. 为什么Java main()方法接受一个String args数组?
- 16. 为什么这个方法在我的IDE中没有定义?
- 17. 为什么没有没有参数的IsNullOrEmpty重载方法?
- 18. 使用接受块作为输入参数的自定义方法的应用程序崩溃
- 19. 为什么bindViewHolder接受一个位置作为参数?
- 20. 编写一个PowerShell cmdlet接受一个脚本块作为参数
- 21. 为什么我的块没有显示?
- 22. 定义什么Sortable接受?
- 23. 为什么std :: get没有一个接受转发参考的签名
- 24. 一个方法的输出与参数和没有参数有什么区别?
- 25. 单一方法接受3个参数或4个参数
- 26. 为什么这个方法有一个'out'参数表示它没有设置?
- 27. 为私有模块编写流型定义的最佳方法是什么?
- 28. 这两个方法参数定义有什么区别?
- 29. 不包含''的定义,并且没有接受第一个参数类型的扩展方法,可以发现
- 30. 接受n个参数的方法C#
你一直在Codecademy网站:)? – squiguy 2013-03-18 05:29:49