Массив в виртуальный объект - PullRequest
0 голосов
/ 31 мая 2011

Проблема!

Мне было интересно, можно ли передать массив в виртуальный объект с помощью метода.Допустим, у меня есть класс «Person» с двумя свойствами «@name» и «@lastname», а затем у меня есть массив, содержащий эту информацию, поэтому мне нужно передать каждый элемент массива в новый объект из класса Person.

Пример #

class Person
  attr_accessor :name, :lastname
  def initialize(name = "", lastname = "")
    @name = name
    @lastname = lastname
  end
end

array_of_names = [["lucia", "germes"], ["eder", "quiñones"], ["pedro", "infante"]]
array_of_names.each_with_index do |item, index|
  virtual_object = item.to_vo(Person.new)
  virtual_object.inspect
  # => "#<Person:0x0000FF @name="eder" @lastname="quiñones">
end

Вопрос?

Возможно ли это даже путем расширения класса Array?

class Array
  def to_vo(object)
    # ...
    # ...
    # ...
  end
end

Любая помощь будет высоко оценена

~ Эдер Киньонес

1 Ответ

3 голосов
/ 31 мая 2011

Да

class Array
  def to_vo klass
    klass.new *self
  end
  # ..OR..
  def to_person
    Person.new *self
  end
end

p a.map { |e| e.to_vo Person }
p a.map(&:to_person)
...