#!/usr/bin/ruby def test yield 7 end #可以直观的看出来,大括号的内容作为块,在test函数里直接调用 test {puts "hello world"} # || 是更近一步传参 test {|a| puts "a = #{a}"} #再高级一点 def test1(&blk) blk.call end test1 { puts "hello world again"} #现在有一个数组,要把一个个函数块加到数组里,就想函数指针一样存储 $arr=[] def add_fun(&blk) #blk.call $arr.push(blk) puts "hello" end # 加载三次 add_fun {puts "arr"} add_fun {puts "arr1"} add_fun {puts "arr2"} #执行 $arr[2].call #换个方式添加函数 add_fun do puts "arr4" end $arr[3].call #添加函数的时候,把参数加上 add_fun do |t| puts "add param in block - #{t}" end $arr[4].call 4 #给封装起来 class Test def initialize @arr = Array.new end def add_fun(&blk) @arr.push blk end def print(i) @arr[i].call end end t1 = Test.new() t1.add_fun do puts "call hello world" end t1.print(0)