Способность передавать их и хранить их в структурах данных - это то, что сразу приходит на ум.Я использовал последний случай не слишком долго в небольшом парсере командной строки: проанализируйте пользовательский ввод с помощью регулярного выражения и вызовите commands[command]
с остальной частью проанализированной строки в качестве аргументов.Конечно, вы можете сделать то же самое с методами и send
, но ИМХО хэш команд лучше.Еще одна вещь, которую я иногда использую - хотя это не очень распространено в Ruby - это curry procs, что вы не можете сделать с помощью метода:
>> multiplier = proc { |x, y| x * y }
=> #<Proc:0x00000100a158f0@(irb):1>
>> times_two = multiplier.curry[2]
=> #<Proc:0x00000100a089c0>
>> times_two[5]
=> 10
EDIT: Вот ещепример (упрощенный, без обработки ошибок):
commands = { :double => proc { |x| x * 2 }, :half => proc { |x| x / 2 } }
run_command = proc do
command, arg = STDIN.gets.split
commands[command.intern][arg.to_i]
end
run_command.call
half 10
# => 5
run_command[]
double 5
# => 10