From: Wayne Magor Date: 2008-07-27T12:14:01+09:00 Subject: Is there a better way to do this wxPython example in Ruby? I have been translating examples from the book "wxPython in Action" into Ruby using wxRuby2. I ran into one example where a method was passed as a parameter in Python. I came up with the solution shown below in Ruby (which works fine) but it seems ugly to me. If someone was not very familiar with Ruby they would say "hmmm... what's this ampersand lambda stuff". Is there a better way to do this in Ruby? Python example using wxPython: def createButtonBar(self, panel): self.buildOneButton(panel, "FIRST", self.OnFirst) self.buildOneButton(panel, "<< PREV", self.OnPrev, (80, 0)) self.buildOneButton(panel, "NEXT >>", self.OnNext, (160, 0)) self.buildOneButton(panel, "LAST", self.OnLast, (240, 0)) def buildOneButton(self, parent, label, handler, pos=(0,0)): button = wx.Button(parent, -1, label, pos) self.Bind(wx.EVT_BUTTON, handler, button) return button My translation to Ruby and wxRuby2: def create_button_bar(panel) build_one_button(panel, "FIRST", &lambda {|e| on_first(e)}) build_one_button(panel, "<< PREV", [80, 0], &lambda {|e| on_prev(e)}) build_one_button(panel, "NEXT >>", [160, 0], &lambda {|e| on_next(e)}) build_one_button(panel, "LAST", [240, 0], &lambda {|e| on_last(e)}) end def build_one_button(parent, label, pos=[0,0], &handler) button = Wx::Button.new(parent, -1, label, pos) evt_button(button) {|event| yield(event)} return button end