|
Prev: Is this a YAML problem, and How do I fix it?
Next: Reading stdout & stderr from a pipe with popen3
From: Oliver Saunders on 3 Jul 2008 15:43 If I declare def foo(a, b) end What code should I use to find the names of the parameters? I only see these methods available on a Method object. ["[]", "arity", "call", "to_proc", "unbind"] For instance in PHP I could do this function foo($a, $b) { } $ref = new ReflectionFunction('foo') $ref->getParameters()[0]->getName(); // a $ref->getParameters()[1]->getName(); // b -- Posted via http://www.ruby-forum.com/.
From: ara.t.howard on 3 Jul 2008 16:11 On Jul 3, 2008, at 1:43 PM, Oliver Saunders wrote: > If I declare > > def foo(a, b) > end > > What code should I use to find the names of the parameters? > I only see these methods available on a Method object. > ["[]", "arity", "call", "to_proc", "unbind"] > > For instance in PHP I could do this > > function foo($a, $b) { } > $ref = new ReflectionFunction('foo') > $ref->getParameters()[0]->getName(); // a > $ref->getParameters()[1]->getName(); // b > -- > Posted via http://www.ruby-forum.com/. > cfp:~ > cat a.rb def foo a, b p local_variables end foo 4, 2 cfp:~ > ruby a.rb ["a", "b"] as to why you'd want to do this though - i've no idea. why not use options? def foo options = {} end foo :a => 4, :b => 2 ?? a @ http://codeforpeople.com/ -- we can deny everything, except that we have the possibility of being better. simply reflect on that. h.h. the 14th dalai lama
From: Matthias Reitinger on 5 Jul 2008 13:28 Oliver Saunders wrote: > If I declare > > def foo(a, b) > end > > What code should I use to find the names of the parameters? You could use ParseTree[1] for that purpose: require 'rubygems' require 'parse_tree' def foo(a, b) end sexp = ParseTree.translate(self.class, :foo) args = sexp.assoc(:scope).assoc(:block).assoc(:args)[1..-1] puts args[0] # => a puts args[1] # => b HTH, Matthias. [1]: http://parsetree.rubyforge.org/ParseTree/ -- Posted via http://www.ruby-forum.com/.
From: Oliver Saunders on 5 Jul 2008 16:36 Thanks Matthias that looks pretty cool. @ara.t.howard: this is useful as a meta-programming technique. Here's an example: # controller implementation def index_action(id, style, redirected_from) local_variables # pre-populated with values from HTTP request params end -- Posted via http://www.ruby-forum.com/.
From: ara.t.howard on 5 Jul 2008 19:08 On Jul 5, 2008, at 2:36 PM, Oliver Saunders wrote: > Thanks Matthias that looks pretty cool. > > @ara.t.howard: this is useful as a meta-programming technique. > Here's an > example: > > # controller implementation > def index_action(id, style, redirected_from) > local_variables # pre-populated with values from HTTP request > params > end > -- > Posted via http://www.ruby-forum.com/. > bad idea ihmo - it'll be almost impossible to map valid http request names to ruby vars, for instance you'll have 'a var with a space' #=> ?? 'a var with a /' #=> ?? etc etc in addition the only way you can do that is with a heavy duty eval process (vars set by eval are only available to further evals) which makes for a super slow request loop. so this sounds like it'll end up being a huge stack of evals - not metaprogramming - unless i'm misunderstanding. can you sketch out an example of what you'd like to do for us? cheers. a @ http://codeforpeople.com/ -- we can deny everything, except that we have the possibility of being better. simply reflect on that. h.h. the 14th dalai lama
|
Pages: 1 Prev: Is this a YAML problem, and How do I fix it? Next: Reading stdout & stderr from a pipe with popen3 |