Я хочу использовать идиому &method(:method_name)
, когда для method_name
требуется более одного объекта. Могу ли я сделать это под Ruby 1.9?
Например, если у меня есть
def move_file(old_filename, new_filename)
STDERR.puts "Moving #{old_filename.inspect} to #{new_filename.inspect}"
# Implementation for careful moving goes here
end
old_filenames = ["foo.txt", "bar.txt", "hoge.ja.txt"]
new_filenames = ["foo_20110915.txt", "bar_20110915.txt", "hoge_20110915.ja.txt"]
код
old_filenames.zip(new_filenames).each(&method(:move_file))
работает под Ruby 1.8, но не под Ruby 1.9. В Ruby 1.9 он пытается сделать move_file(["foo.txt", "foo_20110915.txt"])
вместо move_file("foo.txt", "foo_20110915.txt")
.
Как мне его разделить, чтобы он имел правильную арность?
Обходные пути, о которых я знаю:
- Заменить
def move_file(old_filename, new_filename)
на def move_file(*arguments)
- Заменить
each(&method(:move_file))
на
each{|old_filename, new_filename| move_file(old_filename, new_filename)}