def before (name)
puts :hola
define_method(name){
if expected_argument_list==1
yield :only_one
else
yield :one,:two
end
}
end
end
class A
before :foo do |*args|
puts second
end
before :foo do |first , second|
puts second
end
end
a = A.new
a.foo
Does anyone know of a way to determine what argument list was
specified when the block is created?
i mean i want to implement the function expected_argument_list, to
return the length of the argument list that the block expected.
Probably is not possible to do that
When are defined the variables of the block, in the class definition
time, or after the yield call?
Thanks
···
--
-------------------------------------
Pedro Del Gallego
def before (name)
puts :hola
define_method(name){
if expected_argument_list==1
yield :only_one
else
yield :one,:two
end
}
end
end
class A
before :foo do |*args|
puts second
end
before :foo do |first , second|
puts second
end
end
a = A.new
a.foo
Does anyone know of a way to determine what argument list was
specified when the block is created?
i mean i want to implement the function expected_argument_list, to
return the length of the argument list that the block expected.
Probably is not possible to do that
When are defined the variables of the block, in the class definition
time, or after the yield call?
> hi all,
>
> in this (http://pastie.caboo.se/97662\) code :
>
> module Kernel
> def expected_argument_list
> 2
> end
>
def before (name, &blk)
puts :hola
define_method(name){
if blk.arity==1
yield :only_one
else
yield :one,:two
end
}
end
end
It's not quite as simple as that but that should be enough to move you
forward.
Yes thats enough for me. I didnt now that the block was a Proc class.
Thanks.
···
On Sep 16, 8:10 am, "Pedro Del Gallego" <pedro.delgall...@gmail.com> > wrote:
--
-------------------------------------
Pedro Del Gallego
BTW, its works perfectly, with that i can decide what parameter return
in advances, (but, yet, I dont know is a good idea or not)
Thanks
module Kernel
def before (name, &block)
define_method(name) do
if block.arity == 1
yield :only_one
elsif block.arity == 2
yield :one,:two
elsif block.arity == -2
yield :one, :a , :splater, :argument
end
end
end
end
class A
before :foo do |first|
puts first
end
end
a = A.new
a.foo
class A
before :foo do |first , second|
puts second
end
end
a2 = A.new
a2.foo
class A
before :foo do |first , *splat_arg|
puts splat_arg
end
end
a3 = A.new
a3.foo
···
2007/9/16, Pedro Del Gallego <pedro.delgallego@gmail.com>:
>
> On Sep 16, 8:10 am, "Pedro Del Gallego" <pedro.delgall...@gmail.com> > > wrote:
> > hi all,
> >
> > in this (http://pastie.caboo.se/97662\) code :
> >
> > module Kernel
> > def expected_argument_list
> > 2
> > end
> >
> def before (name, &blk)
> puts :hola
> define_method(name){
> if blk.arity==1
> yield :only_one
> else
> yield :one,:two
> end
> }
> end
> end
>
> It's not quite as simple as that but that should be enough to move you
> forward.
Yes thats enough for me. I didnt now that the block was a Proc class.
Thanks.
--
-------------------------------------
Pedro Del Gallego
Email : pedro.delgallego@gmail.com
--
-------------------------------------
Pedro Del Gallego