4

Rubyでは、セットはSet [1,2,3]で初期化できます。配列も初期化できます:Array [1,2,3]

自分のクラスに同じことをするコードを書くことは可能ですか?それとも、いくつかの組み込みクラスの言語機能にすぎませんか?

4

3 に答える 3

5

はい、[][]=は単なるメソッドであるため、オーバーライドできます。

あなたはこのようなことを試すことができます:

class MyArray
  attr_accessor :data

  def self.[](*values)
    obj = MyArray.new
    obj.data = values
    return obj
  end
end
于 2013-01-09T01:42:10.737 に答える
5

Rubyでは、foo[bar, baz]は単なる構文糖衣ですfoo.[](bar, baz)。必要なのは。という名前のメソッドだけです[]

ちなみに、あなたはただドキュメントを見る必要があります、例えばSet

[](*ary)

指定されたオブジェクトを含む新しいセットを作成します。

それがまさにそこにあるドキュメントです。

基本的に、必要なのは

class Foo
  def self.[](*args, &block)
    new(*args, &block)
  end
end
于 2013-01-09T01:44:29.033 に答える
2
class X
  attr_accessor :contents

  def self.[](*x)
    obj = self.new
    obj.contents = x
    obj
  end
end
于 2013-01-09T01:41:41.327 に答える