Hi, I'm looking for cucumber/generators and didn't understand why use
'*' before string on initialize method.
I put it on irb and the result is the same.
class NamedArg
attr_reader :name
def initialize(s) @name, @type = *s.split(':')
end
end
class NamedArg
def initialize(s) @name, @type = *s.split(':')
end
end
Why and where use * before string?
Actually, you use the asterisk in front of an array. The asterisk
makes the array to a list of arguments. Examples:
ary.push [ :a, :b] # pushes an array
ary.push *[ :a, :b] # pushes two symbols
You may even do this:
done = %(exit quit bye)
case str.downcase
when *done then return
end
In your example, the conversion will be done automatically when
the right side is an array. When I code, I write the asterisk
explicitly every time to remind myself what I meant.
Bertram
···
Am Freitag, 13. Feb 2009, 01:51:24 +0900 schrieb Jonatas Paganini:
It's not before a String but before an Array. You can see for yourself by firing up IRB and experimenting a bit with this. The short story is that it's called "splash operator" IIRC and it will distribute the Array across all parameters or local variables. Other example uses are
def foo(a,b,c)
puts a,b,c
end
foo(1,2,3)
ar = [1,2,3]
foo(*ar)
foo(ar) # -> error because you do not provide enough arguments
HTH
Kind regards
robert
···
On 12.02.2009 17:51, Jonatas Paganini wrote:
Hi, I'm looking for cucumber/generators and didn't understand why use
'*' before string on initialize method.
I put it on irb and the result is the same.
class NamedArg
attr_reader :name
def initialize(s) @name, @type = *s.split(':')
end
end
Am Freitag, 13. Feb 2009, 01:51:24 +0900 schrieb Jonatas Paganini:
> class NamedArg
> def initialize(s)
> @name, @type = *s.split(':')
> end
> end
>
> Why and where use * before string?
Actually, you use the asterisk in front of an array. The asterisk
makes the array to a list of arguments. Examples:
ary.push [ :a, :b] # pushes an array
ary.push *[ :a, :b] # pushes two symbols
You may even do this:
done = %(exit quit bye)
case str.downcase
when *done then return
end
In your example, the conversion will be done automatically when
the right side is an array. When I code, I write the asterisk
explicitly every time to remind myself what I meant.