代码之家  ›  专栏  ›  技术社区  ›  dimus

Ruby中是否有类似于python的vars()方法?

  •  3
  • dimus  · 技术社区  · 16 年前

    在python中有vars()方法,它将局部变量的名称作为键及其值返回字典,因此可以这样做:

    a = 1
    b = 2
    "%(a)s %(b)s" % vars()
    

    Ruby中是否有vars()的模拟?我能想到的最接近的结构是

    local_variables.inject({}) {|res,var| res[var] = eval(var.to_s); res}
    
    2 回复  |  直到 16 年前
        1
  •  1
  •   AboutRuby    16 年前

    你可以像这样实现它,但它不是很漂亮。正如Gnibbler指出的,使用插值更容易。我所看到的唯一的优点是,如果格式化字符串多次格式化相同的值。即使这样,使用自定义哈希(而不是将var转储到格式化程序中)或将其抽象到方法中可能会更容易。

    #!/usr/bin/env ruby
    
    module Kernel
      def vars(b)
        Hash[
          (b.eval('local_variables')-[:_]).
          map{|v| [v,b.eval(v.to_s)]}
        ]
      end
    end
    
    a = 10
    puts vars(binding)
    
        2
  •  1
  •   John La Rooy    16 年前

    红宝石相当于你所做的

    "#{a} #{b}"
    

    你还需要别的理由吗 vars() ?

    推荐文章