From: westlin9@... Date: 2007-07-20T21:20:01+09:00 Subject: Re: block_given? problem On 20 Juli, 14:04, "Robert Dober" wrote: > On 7/20/07, westl...@gmail.com wrote: > > > > > I can't figure out why the do...end block isn't detected by the > > "block_given?" function. The problem occurs when a method call with a > > block is used in a puts statement. See the code example below. > > Can some one explain this to me please? Is this a bug? > > > class TheClass > > def self.TheMethod() > > if block_given? > > puts "yes, block given" > > else > > puts "no block is given" > > end > > 'return val' > > end > > end > > > # ok > > puts TheClass.TheMethod {|param| 123} > > > # block not detected > > puts TheClass.TheMethod do |param| > > 123 > > end > > > # ok > > a = TheClass.TheMethod {|param| 123} > > puts a > > > # ok > > a = TheClass.TheMethod do |param| > > 123 > > end > > puts a > > puts( TheClass.TheMethod do nil end ) > > do...end and {} do not have the same precedence, thus, without the () > you are doing this > puts( TheClass.TheMethod ) do nil end > > HTH > Robert > > -- > I always knew that one day Smalltalk would replace Java. > I just didn't know it would be called Ruby > -- Kent Beck- D�lj citerad text - > > - Visa citerad text - Thanks