this code is a simplified version of the code I saw in Rails.
def speak(*types,&block)
block.call
end
I can understand why this code is working
speak(23) { puts ‘hi’ }
why this code is working ?. This code should fail because I am not
providing any # param to types. It means block is being passed as the
first param and that’s not # good
speak { puts ‘hi’ }
Neeraj K. wrote:
providing any # param to types. It means block is being passed as the
first param and that’s not # good
speak { puts ‘hi’ }
*args means “zero or more parameters” which are then placed in an array
and passed into the method. The block is not being passed as the first
parameter.
-Justin
On Fri, 18 Apr 2008 14:29:10 -0500, Neeraj K. wrote:
first param and that’s not # good
speak { puts ‘hi’ }
When you prefix the last argument name with a * (as you did with *types)
then you can have any number of arguments (0 or more) at the end, and
they will all be put into an array.
so
def speak(*types,&block)
p types
block.call
end
speak(23) { puts ‘hi’ }
speak { puts ‘hi’ }
will print
[23]
hi
[]
hi