0

Just wondering if something like this is possible:

module A
    def sender
        varA = 'foobz'
        B.public_send('receiver', varA)
    end
end
module B
    def receiver
        puts varA #=> 'foobz'
    end
end

Here I'm trying to send varA, which is defined in module A, to module B, intact. By intact I mean we're not putting it in a hash or anything, we make varA pop into existence in B.receiver.

Starkers
  • 10,273
  • 21
  • 95
  • 158

1 Answers1

1

You would have to do something like this:

module A
  def self.sender
    varA = 'foobz'
    B.public_send('receiver', varA)
  end
end

module B
  def self.receiver(varA)
    puts varA #=> 'foobz'
  end
end

A.sender #=> foobz

You have defined instance methods, but modules don't have instances. Also, you need to pass varA as an argument.

Or perhaps this is what you have in mind:

module A
  def self.sender
    B.instance_variable_set(:@varA, 'foobz')
    B.public_send('receiver') 
  end
end

module B
  def self.receiver
    puts @varA #=> 'foobz'
  end
end

A.sender #=> foobz
Cary Swoveland
  • 106,649
  • 6
  • 63
  • 100