Some method help ... not really sure about proper title

Hi guys!

I'm kinda new to ruby , and was wondering about the following stuff ,
assume the following code :

Shoes.app {
  button("Press Me") { alert("You pressed me") }
}

how could I write code like that , so that when I call a method like
button , I don't have to put an object or a class name in front of it .

To give another example , let's assume the following code :

class Whatever
   attr_accessor :value

   def initialize
      yield self
   end

   def some_method
      puts "some method"
   end

end

I would like to do the following ( if it's possible ) :

w = Whatever.new do |whatever|
        some_method
        value = 20
end

puts w.value # this should output 20

Is this possible , without adding those methods to Object ?

Thank you very much!

···

--
Posted via http://www.ruby-forum.com/.

Hi, if you use the following you can call certain methods like you want.

class Whatever
   attr_accessor :value

   def initialize &blk
      instance_eval &blk
   end

   def some_method
      puts "some method"
   end
end

This will allow to do:

w = Whatever.new {some_method}

The only exception are the xxx= methods. This won't work:

w = Whatever.new {value = 20}

The reason is that value= methods have to be called as self.value=20
within the class, because it's
the only way for the interpreter to understand that you want a method
call and not a local variable to the
function. You could do:

w = Whatever.new {self.value = 20}

That works.

Hope this gives you some other ideas...

Jesus.

···

On Tue, Aug 19, 2008 at 10:23 PM, Lex Williams <etaern@yahoo.com> wrote:

Hi guys!

I'm kinda new to ruby , and was wondering about the following stuff ,
assume the following code :

Shoes.app {
button("Press Me") { alert("You pressed me") }
}

how could I write code like that , so that when I call a method like
button , I don't have to put an object or a class name in front of it .

To give another example , let's assume the following code :

class Whatever
  attr_accessor :value

  def initialize
     yield self
  end

  def some_method
     puts "some method"
  end

end

I would like to do the following ( if it's possible ) :

w = Whatever.new do |whatever|
       some_method
       value = 20
end

puts w.value # this should output 20

Is this possible , without adding those methods to Object ?

That was exactly what I was looking for!
Thank you very much !

···

--
Posted via http://www.ruby-forum.com/.