~/rubytesting$ cat -n shell.rb 1 2 def ls(args) 3 hidden = args[:hidden]? '-a' : '' 4 dir = args[:dir]? '-d' : '' 5 reverse = args[:reverse]? '-r' : '' 6 time = args[:time]? '-t' : '' 7 recursive = args[:recursive]? '-R' : '' 8 regexp = args[:regexp] || Regexp.new('.') 9 10 files = %x{ls #{hidden} #{reverse} #{dir} #{recursive} #{time} 2>&1}.split(/\n/) 11 files.select { |f| f =~ regexp } 12 end 13 14 puts ls(:reverse =>1, :time => 1, :regexp => /^m/) 15 puts '***********************************************' 16 puts ls(:hidden =>1, :regexp => /^.[ms]/)Podríamos haber llamado a
ls
así
ls({:reverse =>1, :time => 1, :regexp => /^m/})
Pero ruby nos permite omitir las llavitas cuando el último argumento del método es el hash
(o si es el único argumento que le sigue es un argumento bloque prefijado de &
).
Un hash sin llaves se denomina bare hash.
ls(:time => 1, :reverse =>1, :regexp => /^m/)
Es posible también omitir los paréntesis en la llamada:
puts ls :hidden =>1, :regexp => /^.[ms]/Si se omiten los paréntesis se deberán también omitir las llaves ya que si unas llaves siguen a un nombre de método Ruby lo interpreta como que estamos pasando un argumento de tipo bloque.
Ejecución:
~/rubytesting$ ruby shell.rb myutf.rb methodmethod.rb memoize map2funcWithLambdas.rb map2func.rb *********************************************** .myutfstring.rb.swp .shell.rb.swp .svn useGreeter.rb useSudoku.rb
Casiano Rodriguez León 2015-01-07