From: xiMera Date: 2010-10-07T01:05:14+09:00 Subject: named parameters in ruby? Hi all, Ruby does not support named parameter for now as all of you know. There is really three solutions for this * hash as parameter * class as parameter * bindings Hash parameters: def do_some( params ) a = params[ :a ] b = params[ :b ] end do_some :a => 1, :b =>2 Class parameters (ugly, written in couple minutes) class A def metaclass class << self; self; end end def set_var( name, val ) eval "@#{name} = val", binding self.metaclass.send( :define_method, name ) do eval "@#{name}" end end def set_vars( params ) params.each{ |key,val| self.set_var( key, val ) } end end def do_some( params ) a = params.a b = params.b end A.new a.set_vars( :a => 1. :b =>2 ) do_some a Bindings way: def do_block( &block ) eval "a=1", block.binding eval "b=2", block.binding end do_block( params ){ a = eval 'a' b = eval 'b' } As we can see there is overtyping in all cases. We always need to map incoming variables into locals or write ugly accessor every time. So My question is: Is there any way to set local variables for blocks outside of block scope? IMHO nice solution will looks like this: def do_some( &block ) block.binding.set_var( 'a', 1 ) block.binding.set_var( 'b', 2 ) block.call end do_some{ puts a puts b }