From: Robert Dober Date: 2007-07-20T21:04:00+09:00 Subject: Re: block_given? problem On 7/20/07, westlin9@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