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 回答