# How to use "eval" to create method parameters?

**URL:** <https://www.ruby-forum.com/t/how-to-use-eval-to-create-method-parameters/179660>\
**Category:** Ruby\
**Created:** [December 1, 2009, 11:45am UTC](https://www.ruby-forum.com/t/how-to-use-eval-to-create-method-parameters/179660 "2009-12-01T11:45:54Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![ISSSSaki\_Baz\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/51bf81/32.png) [@ISSSSaki\_Baz\_C](https://www.ruby-forum.com/u/ISSSSaki_Baz_C)\
**Post date:** [December 1, 2009, 11:45am UTC](https://www.ruby-forum.com/t/how-to-use-eval-to-create-method-parameters/179660/1 "2009-12-01T11:45:54Z")

</div>

Hi, let’s imagine a method “my\_method()” whic allows any number of  
parameters.  
And I need to create those parameters list in the following way:

lalalala = false  
if lalalala  
params = “:user, ‘alice’, 1456”  
else  
params = “:user, 0000”  
end

After it I must invoke the method with “params” string as parameters.  
I expected that the following could work but it fails:

my\_object.my\_method(eval(params))  
=\> SyntaxError: (eval):1: syntax error, unexpected ‘,’, expecting $end  
:user, 0000  
^

So I don’t understand how to use eval to achieve it. Any help please?  
Thanks a  
lot.

---

<div class="post-metadata">

**Author:** ![ISSSSaki\_Baz\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/51bf81/32.png) [@ISSSSaki\_Baz\_C](https://www.ruby-forum.com/u/ISSSSaki_Baz_C)\
**Post date:** [December 1, 2009, 1:10pm UTC](https://www.ruby-forum.com/t/how-to-use-eval-to-create-method-parameters/179660/2 "2009-12-01T13:10:46Z")

</div>

Why not use a plain old Array?

lalalala = false  
if lalalala  
params = [:user, ‘alice’, 1456]  
else  
params = [:user, 0000]  
end

my\_object.my\_method(\*params)

Regards  
Jan F.

---

<div class="post-metadata">

**Author:** ![ISSSSaki\_Baz\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/51bf81/32.png) [@ISSSSaki\_Baz\_C](https://www.ruby-forum.com/u/ISSSSaki_Baz_C)\
**Post date:** [December 1, 2009, 2:11pm UTC](https://www.ruby-forum.com/t/how-to-use-eval-to-create-method-parameters/179660/3 "2009-12-01T14:11:39Z")

</div>

El Martes, 1 de Diciembre de 2009, Jan F. escribiÃ³:

> Why not use a plain old Array?
> 
> lalalala = false  
> if lalalala  
> params = [:user, ‘alice’, 1456]  
> else  
> params = [:user, 0000]  
> end
> 
> my\_object.my\_method(\*params)

Yes! I missed that!

Thanks a lot.

---

<div class="post-metadata">

**Author:** ![ISSSSaki\_Baz\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/51bf81/32.png) [@ISSSSaki\_Baz\_C](https://www.ruby-forum.com/u/ISSSSaki_Baz_C)\
**Post date:** [December 1, 2009, 4:58pm UTC](https://www.ruby-forum.com/t/how-to-use-eval-to-create-method-parameters/179660/4 "2009-12-01T16:58:27Z")

</div>

On Tue, Dec 1, 2009 at 1:31 PM, Iñaki Baz C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Yes! I missed that!

If you do have a string with comma-separated values, you can do this  
(a little hackish, though):

irb(main):001:0\> a = “:user, ‘alice’”  
=\> “:user, ‘alice’”  
irb(main):011:0\> def m \*params  
irb(main):012:1\> p params  
irb(main):013:1\> end  
=\> nil  
irb(main):014:0\> args = eval(“[#{a}]”)  
=\> [:user, “alice”]  
irb(main):015:0\> m \*args  
[:user, “alice”]  
=\> nil

Jesus.
