Какая логика и почему AppleScript применяет к именам папок? Угадай, что делает этот скрипт
Я просто наткнулся на одно из самых неуклюжих поведений языка программирования в моей жизни.
Угадайте, что делает этот AppleScript:
set workspace to "tmp"
set folder1 to "08_0000012_11"
set folder2 to "8_12_11"
tell application "Finder"
if (not (exists folder folder1 of (workspace as alias))) then
make new folder at workspace as alias with properties {name:folder1}
end if
if (not (exists folder folder2 of (workspace as alias))) then
make new folder at workspace as alias with properties {name:folder2}
else
log "Folder already exists " & folder2
end if
end tell
Следует создать две папки 08_0000012_11 и 8_12_11 внутри /tmp, верно? ..... Неправильно! Он создает первый и утверждает, что другой уже существует. Но это не так!
Кажется, что он пытается применить некоторую логику к этим именам. Разбивает их на 3 числа и игнорирует нули. Пожалуйста, скажите мне, что есть разумное объяснение этому. Или это происходит только со мной...
1 ответ
Это ошибка в Finder. При сортировке имен файлов следует игнорировать только начальные нули, а не при их сравнении. Подайте отчет об ошибке.
Та же логика работает правильно в системных событиях, например:
set fname to "001"
tell application "System Events"
if not exists folder fname of desktop folder then
make new folder at desktop folder with properties {name:fname}
end if
end tell