From: Joel VanderWerf Date: 2010-07-06T13:46:43+09:00 Subject: Re: Golf on CLI code Intransition wrote: > def command(argv) > lookup = registry.map{ |cc| [cc, cc.cli] }.sort{ |a,b| b[1].size > <=> a[1].size } > x = lookup.find do |cc, cli| > t = true > cli.each_with_index do |r, i| > t = t && (r === argv[i]) > end > t > end > cmdc = x[0] > argv = argv[x[1].size..-1] > return cmdc, argv > end Untested: def command(argv) lookup = registry.sort_by {|cc| cc.cli.size} cmdc = lookup.find do |cc| cc.cli.zip(argv).all? do |r,arg| r === arg end end return cmdc, argv[cmdc.cli.size..-1] end The following (assuming it works!) would be more compact still: class Symbol alias old_to_proc to_proc def to_proc case self when :=== # etc. proc {|x,y| x === y} else old_to_proc end end end def command(argv) lookup = registry.sort_by {|cc| cc.cli.size} cmdc = lookup.find do |cc| cc.cli.zip(argv).all?(&:===) end return cmdc, argv[cmdc.cli.size..-1] end