集合[1,2,3]的Ruby语言特性

集合[1,2,3]的Ruby语言特性,ruby,initialization,language-features,Ruby,Initialization,Language Features,在Ruby中,集合可以由集合[1,2,3]初始化 数组也是如此:数组[1,2,3] 是否可以编写一些代码来对我自己的类执行相同的操作? 或者它只是一些内置类的语言特性?是的,因为[]和[]=只是方法,它们可以被重写 class X attr_accessor :contents def self.[](*x) obj = self.new obj.contents = x obj end end 您可以尝试以下方法: class MyArray att

在Ruby中,集合可以由集合[1,2,3]初始化 数组也是如此:数组[1,2,3]

是否可以编写一些代码来对我自己的类执行相同的操作?
或者它只是一些内置类的语言特性?

是的,因为
[]
[]=
只是方法,它们可以被重写

class X
  attr_accessor :contents

  def self.[](*x)
    obj = self.new
    obj.contents = x
    obj
  end
end
您可以尝试以下方法:

class MyArray
  attr_accessor :data

  def self.[](*values)
    obj = MyArray.new
    obj.data = values
    return obj
  end
end

在Ruby中,
foo[bar,baz]
只是
foo[(bar,baz)
的语法糖。您只需要一个名为
[]
的方法

顺便说一下:您只需要查看文档,例如:

[](*ary)
创建包含给定对象的新集合

这就是文件

基本上,你所需要的就是

class Foo
  def self.[](*args, &block)
    new(*args, &block)
  end
end

作为旁注,
Array[1,2,3]
将调用
Array.[]
,但是
Array[1,2,3]
(在
y
后面有空格)将调用
内核#数组
。Avdi Grimm将
内核#数组
等方法描述为中的“转换函数”。