アップデート
以下は無視してください。これはMacruby0.10に限定されたバグであり、おそらく私のインストールに固有のバグであることが判明しました。他の誰かが問題にぶつかった場合に備えて、私は投稿を残します。
私はルビーブロックについて何かを誤解しているようでした。Pathname
またはFind
モジュールを使用find
して、特定のディレクトリツリー内の特定のファイルを見つけたいと思いました。ただし、提供されたブロックを取得してfind
値を返すことができません。
これから:
n= (1..10).each {|i| break i if i > 5}
puts "n = #{n}" #=> n=6
...動作します(そして一般的な構造です)私は次のいずれかを期待していました:
starting_directory= #... a directory path
file_name_I_want_to_find= #... a file name e.g. my_file.txt
pd=Pathname.new(starting_directory)
path=pd.find{|p| break p if p.basename.to_s==file_name_I_want_to_find }
puts "path = #{path}" #=> path =
... また:
path=Find.find(starting_directory) {|p| break p if p.include?(file_name_I_want_to_find) }
puts "path = #{path}" #=> path =
...探しているパスを1つだけ生成しますが、どちらも値を生成しません。
次の両方の理由で、テストが機能することを知っています。
pd.find{|p| puts p if p.basename.to_s==file_name_I_want_to_find }
#=> /path/to/file_name_I_want_to_find
Find.find(starting_directory) {|p| puts p if p.include?(file_name_I_want_to_find) }
#=> /path/to/file_name_I_want_to_find
...期待どおりに動作します。
最初の例のように動作break
しないのはなぜですか?find
より一般的には、私はこの状況に正しいルビーテクニック/イディオムを使用していますか?