class Array def fun sum = 0 self.each do |x| sum = yield(sum,x,y=4) end return sum end end
p [2,3,34,5].fun{|_sum, x| _sum = _sum+x}
输出为 44
1.在给 yield 中多传入一个参数 y=4 为什么 block 也能正常执行? 2.既然能多传入参数,那么这样做有什么用?·
搞清楚 BLOCKS, PROCS, AND LAMBDAS 三者的关系和区别就不会再有这样的疑问了。
简单的说,你传递过去的是一个 block,而 blocks 不检查传入的参数个数,所以你爱传几个参数就都行。而 lambdas 是匿名方法,它才会检查参数的个数。
正因如此,当我们有如下的代码
class Object < ActiveRecord::Base scope :by_app, ->(app_id) { where(application_id: app_id) } end
当你传入的参数个数不对的时候就会报错啦。
请看下文中,BLOCKS, PROCS, AND LAMBDAS 这一段。 http://wjp2013.github.io/ruby/codecademy-ruby/
谢谢