From: Robert Klemme Date: 2007-04-30T19:05:04+09:00 Subject: Re: Ways to change the behavior of a block On 30.04.2007 07:31, Brian Guthrie wrote: > I'd like to be able to change the behavior of a call to a block (I'm > working on a design-by-contract system and would like to be able to > check the block's signature, filtering each call through some contract > check) and I was wondering if anyone had any advice. It's easy enough > to override Proc#call, but doing so doesn't appear to affect calls to > implicit blocks with using the yield keyword. Is it even possible to > do this? If I understand you properly you want to be checking the argument list in the *calling* method. irb(main):003:0> def f(&b) irb(main):004:1> raise ArgumentError unless b.arity == 4 irb(main):005:1> b[0,1,2,3] irb(main):006:1> end => nil irb(main):007:0> f {|a,b| p a,b} ArgumentError: ArgumentError from (irb):4:in `f' from (irb):7 from :0 irb(main):008:0> f {|a,b,c,d| p a,b} 0 1 => nil Kind regards robert