Какая логика и почему 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
Другие вопросы по тегам