尘土飞扬

关注C#、NET、Java、Ruby

导航

Ruby Proc 应用实例

=== Ruby Proc 应用实例 ===
=== created by yl 2011.02.11 ===

  def index
    @users = []

    #将 :yy_name 传递给test_proc m_name参数;
    #将 :a => 1, :b => 2由Ruby自动组合为Hash后传递给test_proc *arg参数;
    #将 do .. end 间的程序块传递给 test_proc &proc参数,类型为Proc,
    #   程序块需要外界传递一个参数(p,也可设置多个参数),该程序块不会马上执行;
    #   只有当调用 proc.call(传递给p的值)时能真正执行。
    #
    #注意:Ruby允许在程序块执行中访问程序块之外现有的变量或数据。
    test_proc :yy_name, :a => 1, :b => 2 do |p|
      puts @users.size
      puts p.class.name
      p.each do |a|
        puts a.class.name
        a.each{|k, v| puts "#{k} : #{v}"} if a.is_a?(Hash)
      end
    end
  end

  private
  def test_proc m_name, *arg, &proc
    puts m_name
    puts proc.class.name
    proc.call(arg)
  end

  == puts msg ==
  yy_name
  Proc
  0
  Array
  Hash
  a : 1
  b : 2

posted on 2012-08-16 10:02  渡者  阅读(212)  评论(0编辑  收藏  举报