Разговор с экземпляром класса Ruby другого класса - PullRequest
1 голос
/ 29 апреля 2011

Возможно, на это уже отвечали ранее, но мне не хватает словарного запаса, чтобы найти решение с помощью поиска по доске.

Я хочу добиться вызова методов экземпляра класса другого класса.

Я думаю, что этот грубый пример иллюстрирует то, что я хочу достичь:

class ClassA
  def method_a
    return 'first example'
  end

  def method_b
    return 'second example'
  end
end

class ClassB
  def initialize
    object = classA.new
  end
end

the_example = classB.new
the_example.[whatever-I’m-missing-to-talk-with-object].method_b 
# should return 'second exampe'

Ответы [ 2 ]

2 голосов
/ 29 апреля 2011

Вместо предоставления переменной @object вы можете использовать делегатор:

require "forwardable"

class ClassB
  extend Forwardable
  def_delegators :@object, :method_b

  def initialize
    @object = ClassA.new
  end
end

таким образом, когда the_example получает вызов method_b, он знает, как делегировать его, возвращая результат @object.method_b.

2 голосов
/ 29 апреля 2011

object должна быть переменной экземпляра, чтобы она не выходила из области видимости после вызова initialize, поэтому назовите ее @object.

Тогда вам нужно будет сделать @object доступным вне определения classB, поэтому вы захотите объявить это.

class ClassB
  attr_reader :object # lets you call 'some_instance_of_classb.object'
  def initialize
    @object = ClassA.new
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...