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' }
on 2008-04-18 21:29
on 2008-04-18 21:43
Neeraj Kumar 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 2008-04-18 22:13
On Fri, 18 Apr 2008 14:29:10 -0500, Neeraj Kumar 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
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.