2015-05-19 2 views
-3
a = MyArray.new(3){ |i| (i+1).to_s } 
a << 1 
puts " #{a.size} #{a[1]} #{a.first} " 
b = MyArray.new; b.push("a").push("b") 
a += b 

и мой a.ok («Foo») собственной переменной a.nowy и т.д.Как создать свой собственный массив в Ruby,

Как создать класс массива со своим собственными переменными и методами и со всеми методы массива: [] каждый вид .push delete ....

PS можно взять в массиве только специфические элементы? например, только «строки» или только целые числа? redefining initialize?

ответ

0

Попробуйте это, но сначала прочитать: http://words.steveklabnik.com/beware-subclassing-ruby-core-classes

class MyClass < Array 

    def my_new_method 
    # do fancy array tricks here 
    end 

end 
+0

показать мне, как я могу добавить свою переменную и метод в MyClass m = MyClass.new (1) p m.variable m [2] – user1415926535897

+0

Если я создаю a = MyClass.new и b = MyClass.new a + = b, массив. не MyClass. Я потерял всю свою переменную – user1415926535897

0

Наследование!

class MyClass < Array 
    #implement functionality 
    def initialize(args) 
    super() 
    end 

    def custom_push(element) 
    self.push(element) 
    end 
end 

Вы можете создать новые методы в своем классе, и переопределить методы, которые уже существуют в Array классе.

Стоит отметить, что each и sort не являются методами на Array класса, они являются частью модуля Enumerable, что Array включает. Это немного странно, но важно знать.

+0

, можно проверить, что помещено в массив? переопределить инициализацию? – user1415926535897

+0

Все вышесказанное – Brennan

+0

Я могу поместить массив во множество способов, << 1 init при создании .push и т. Д. Необходимо переопределить все, чтобы выбрать только целое число или строку? Мне нужен массив для сбора только String и integer – user1415926535897

Смежные вопросы