Доступ к закрытым членам внешнего класса во внутреннем классе: JRuby - PullRequest
1 голос
/ 07 октября 2010

Я не могу получить доступ к переменной экземпляра внешнего класса во внутреннем классе.Это простое приложение Swing, которое я создаю с помощью JRuby:

class MainApp
 def initialize
   ...
   @textArea = Swing::JTextArea.new
   @button   = Swing::JButton.new
   @button.addActionListener(ButtonListener.new)

   ...
 end

 class ButtonListener
   def actionPerformed(e)
      puts @textArea.getText #cant do this
   end
 end
end

Единственный способ обойти это:

...
@button.addActionListener(ButtonListener.new(@textArea))
...

class ButtonListener
  def initialize(control)
     @swingcontrol = control
  end
end

, а затем использовать @swingcontrol ins вместо @textArea в методе actionPerformed.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2011

Ruby может сделать это, используя блок, а не вложенный класс.

class MainApp
 def initialize
   ...
   @textArea = Swing::JTextArea.new
   @button   = Swing::JButton.new
   @button.addActionListener do |e|
      puts @textArea.getText
   end

   ...
 end
end
0 голосов
/ 07 октября 2010

Полагаю, прямой доступ к внешним членам класса из внутреннего класса без использования хаков невозможен. Потому что @textArea в классе ButtonListener отличается от @textArea в MainApp.

(я новичок в ruby, так что могу ошибаться. Так что не стесняйтесь меня поправлять)

...