1

1行の式でいくつかの自動有効化ハッシュを初期化したいと思います。これまでのところ、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

更新:これで、演算子をクラス外で定義する必要があることがわかりました。そのようなオブジェクト クローン オペレータを定義することは可能ですか?


Update2メソッドのより明確な定義、fewJoshuaのおかげ


参考文献

  1. http://www.linux-mag.com/cache/7432/1.html
  2. Ruby は PHP のような var 参照をサポートしていますか?
  3. http://ruby.about.com/od/advancedruby/a/deepcopy.htm
4

1 に答える 1

1

あなたが求めているところは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=AutoHash.few 3探しているものではなく、本当に独自のオペレーターを実装したい場合は、RubyConf 2009 での講演であるHacking parse.yをチェックしてください。プレゼンテーションはhttp://rubyconf2009 で見ることができます。 confreaks.com/19-nov-2009-17-15-hacking-parsey-tatsuhiro-ujihisa.htmlでスライドを見ることができますhttp://www.slideshare.net/ujihisa/hacking-parsey-rubyconf-2009

于 2010-07-02T12:21:44.580 に答える