&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 では動作しません。move_file(["foo.txt", "foo_20110915.txt"])
Ruby 1.9 では、 の代わりに実行しようとしています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)}