Я ищу некоторую экспертную информацию относительно рекурсии внутри vbscript. Из различных примеров, найденных в Интернете, я создал следующий код, который работает, кстати.vbscript методы программирования рекурсии
- http://saltwetbytes.wordpress.com/2010/05/04/vbscript-grabbing-subfolders-recursively/
http://technet.microsoft.com/en-us/library/ee198872.aspx
Function GetAllSubFolders(RootFolder, ByRef pSubfoldersList) Dim fso, SubFolder, root Set fso = CreateObject("scripting.filesystemobject") set root = fso.getfolder(RootFolder) For Each Subfolder in root.SubFolders If pSubFoldersList = "" Then pSubFoldersList = Subfolder.Path Else pSubFoldersList = pSubFoldersList & "|" & Subfolder.Path End If GetAllSubFolders Subfolder, pSubFoldersList Next GetAllSubFolders = pSubFoldersList End Function
Мой вопрос: Является ли это хорошо, когда речь Подход идет о создании рекурсивной функции (с использованием параметра для хранения предыдущих результатов)?
Я предпочитаю помещать это в (автономную) функцию, поэтому процедура возвращает подпункты в качестве результата. Но большинство найденных примеров используют «sub». Я всегда смущаюсь, когда речь заходит о «sub» vs «function» (я понимаю, когда вам нужна процедура, которая должна вернуть что-то, что вы используете функцию, imho это похоже на case в этом примере) Но я мог бы также использовать «под» и просто ссылку на выходной параметр (ByRef pSubfoldersList)
Итак, что такое лучшая практика или лучше использовать весь другой подход? (функция этих примеров также очень медленная по сравнению с [shell.exec "cmd/c dir RootFolder/s/b/a: d"], я думаю, это побочный эффект от рекурсии или, может быть, FSO просто на самом деле медленный?)
(почта уведомления, кажется, не работает :-() Thanx за ответ, те, безусловно, некоторые полезные советы.Я обязательно проведу «поиск всего» Для этого примера я просто хотел создать список файлов в папке и все ее подпапки. Но теперь я заинтригован тем, как создать рекурсивную функцию. Возможно, вы можете сказать мне, как вы это сделаете в Ruby? Конкретная проблема, с которой я столкнулся в vbscript, заключается в том, что не представляется возможным определить общедоступную переменную внутри функции, поэтому какие опции оставить для сохранения предыдущего результата (автономных) рекурсивных функций? – user1348255
хорошо, это зависит от того, как вы определяете «самостоятельно», в моем ответе выше я использую iCount как глобальный var, доступ к которому вы можете получить в своих функциях, иначе вам нужно передать переменную в другую функцию (или же в случае рекурсия) по ссылке, как вы. То же самое касается всех языков, о которых я знаю, я советую Ruby, потому что это также язык сценариев, но со всей властью скомпилированных языков и, тем не менее, легко использовать и учиться. – peter