Yield Bang ( yield! ) is similar to Ruby's multiple assignment.
In Ruby (multiple assignment)
require 'pathname'
def all_file_under(pathname)
pathname.each_child.find_all(&:directory?).reduce(pathname.each_child.find_all(&:file?)) do |accum, subpathname|
accum = Array[*accum, *all_file_under(subpathname)]
end
end
puts all_file_under(Pathname.new('C:\temp'))
C:\temp/AAAAA C:\temp/BBBBBB C:\temp/CCCCCCC C:\temp/DDD/EEEE ...
In F# (Yield Bang)
> open System.IO;; > let rec allFilesUnder basePath = - seq { - yield! Directory.GetFiles(basePath) - for subdir in Directory.GetDirectories(basePath) do - yield! allFilesUnder subdir - };; val allFilesUnder : basePath:string -> seq<string> > allFilesUnder @"C:\temp";; val it : seq<string> = seq ["C:\temp\AAAAA"; "C:\temp\BBBBBB"; "C:\temp\CCCCCCC"; "C:\temp\DDD\EEEE"; ...]
No comments:
Post a Comment