From: GOTO Kentaro Date: 2002-09-25T14:30:40+09:00 Subject: Re: are functions/methods "first class objects"? At Wed, 25 Sep 2002 13:53:46 +0900, Bulat Ziganshin wrote: > sort_by "es", filenames # sorts by extension then size > sort_by "n", filenames # sorts by filename w/o path and extension Ruby 1.7 has Array#sort_by. The above are written as: filenames.sort_by{|i| File.extname(i), File.size(i)]} filenames.sort_by{|i| File.basename(i).sub(/\.[^.]+$/, "")} > i want to create meta-function which returns function to sort (or just > compare criterions) given ordering string: > > sort_by "es" > returns > {|filename| [File.ext(filename), File.stat(filename).size] } > > can you (and Ruby :) help me? -eval How about: def criteria(switch) case switch when "es" Proc.new{|i| [File.extname(i), File.size(i)]} when "n" Proc.new{|i| File.basename(i).sub(/\.([^.]+)$/, "")} else Proc.new{|i| i} end end puts Dir["*"].sort_by(&criteria("es")) -- Gotoken