私はここで誰も繰り返さないことを願っていますが、私はグーグルとここを検索していて、何も思いつきません。この質問は、実際には私のコードを「性別化」することの問題です。
私が具体的にやろうとしていることはこれです:
Dir.new('some_directory').each do |file|
# is there a way to refer to the string 'some_directory' via a method or variable?
end
ありがとう!
一般的ではありません。ブロックが呼び出される引数はメソッド自体に完全に依存し、each
呼び出されるまでに(ブロックを呼び出す)、文字列'some_directory'
が渡されたという事実Dir.new
は長い間忘れられていました。つまり、それらはまったく別のものです。
ただし、次のようなことができます。
Dir.new(my_dir = 'some_directory').each do |file|
puts "#{my_dir} contains #{file}"
end
それが機能しない理由は、new
とeach
は2つの異なる方法であるため、互いのパラメーターにアクセスできないためです。コードを「性別化」するには、2つのメソッド呼び出しを含む新しいメソッドを作成し、繰り返されるパラメーターをそれに渡すことを検討できます。
def do_something(dir)
Dir.new(dir).each do |file|
# use dir in some way
end
end
新しいメソッドを作成するオーバーヘッドが非常に低いという事実は、これと同じくらい小さなコードのチャンクに対してメソッドを作成することが完全に合理的であることを意味します。これは、Rubyを言語の操作の喜びにする多くの理由の1つです。
変数に分割するだけです。Rubyブロックはクロージャなので、アクセスできます-
dir = 'some_directory'
Dir.new(dir).each do |file|
# use dir here as expected.
end