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

在Ruby中使用新操作符多次初始化自动活跃哈希

  •  1
  • Andy  · 技术社区  · 14 年前

    auto-vivifying hashes 通过一行表达式。到目前为止,我找到了一个额外的方法 AutoHash 对象:

    class AutoHash < Hash
      ...
      def few(n=0)
        Array.new(n) { AutoHash.new }
      end
    

    这让我可以做以下几点

    a, b, c = AutoHash.new.few 3
    

    不过,我觉得可以通过定义一个新的运算符来实现下面的句子 :=

    a := b := c = AutoHash.new
    

    你能帮我实现这个吗?


    superators ?

    require 'superators'
    
    class AutoHash < Hash
      ...
      superator ":=" do |operand|
        if operand.kind_of? Hash
          ...
        else
          ...
        end
      end
    

    现在我看到操作符需要在类之外定义。是否可以定义这样的对象克隆操作符?


    更新2 方法定义更清晰 few ,多亏了乔舒亚


    工具书类

    1. http://www.linux-mag.com/cache/7432/1.html
    2. Does Ruby support var references like PHP?
    3. http://ruby.about.com/od/advancedruby/a/deepcopy.htm
    1 回复  |  直到 7 年前
        1
  •  1
  •   Joshua Cheek    14 年前

    你要求的地方 a := b := c := AutoHash.new.few 3 我想(不确定我是否理解你的愿望)你真的想要 a,b,c=Autohash.new.few 3


    我也发现你创造的回报价值是混乱的,也许尝试

    def few(n=0) 
      Array.new(n) { AutoHash.new } 
    end 
    

    除此之外,似乎 few a,b,c=AutoHash.few 3 如果您在类中定义了几个:

    def AutoHash.few(n=0)
      Array.new(n) { AutoHash.new }
    end
    

    如果 a、 b,c=自动哈希。3 不是你要找的,你呢 真正地 想要实现你自己的操作符,那就去看看吧 黑客解析.y ,这是2009年RubyConf上的一次演讲。你可以在 http://rubyconf2009.confreaks.com/19-nov-2009-17-15-hacking-parsey-tatsuhiro-ujihisa.html 你可以在 http://www.slideshare.net/ujihisa/hacking-parsey-rubyconf-2009