2015-03-20 2 views
0

Может кто-нибудь объяснить, почему это не работает?AppleScript: Показать файл POSIX с переменной

tell application "Finder" 
    set myFile to "/Users/" 
    reveal POSIX file myFile 
end tell 

Это изменение будет работать:

reveal myFile as POSIX file 

Странно, что обе версии работают без переменных:

reveal POSIX file "/Users/" 
reveal "/Users/" as POSIX file 

Что происходит?

ответ

1

Matt Neuburg пишет

Не путайте принуждение с объектом строкой спецификатором! (См "Объект String, спецификатор" в главе 11.)

Это принуждение: "перья:" в качестве псевдонима

Это строковый объект спецификатора: псевдоним "перья:"

Различение может иметь решающее значение. Существуют ситуации, когда принуждение будет скомпилировано, но спецификатор объекта не будет. Вы не можете скомпилировать спецификатор псевдонима, который использует литеральную строку, если файл не существует, но вы можете скомпилировать принуждение от любой строки к псевдониму. И есть обстоятельства, когда спецификатор строки объекта будет скомпилировать, но принуждение не будет. Вы можете сформировать спецификатор файла, используя строку , но вы не можете принуждать строку к файловому объекту. (См. «Принудительные действия файлов» далее в этой главе.)

Возможно, причина может быть найдена здесь!

+1

Это в значительной степени. Прежде всего, что происходит, когда речь идет о строковых литералах, это, вероятно, компилятор Applescript, переводит эту и промежуточную форму, а затем видит, что она должна делать, чтобы заставить ее работать. Для других случаев с переменными он видит файл Posix var, он переводит его в aha: теперь я получаю переменную класса cfurl (File: // path/to/your/file), но ее нет, просто регулярный путь posix, а затем он терпит неудачу. Когда он ** принудительно **, то он берет ваш путь posix и преобразует его в cfurl (File: //your/file.txt) и передает это значение * как * cfurl. – McUsr

Смежные вопросы