global var выдает ошибку «Переменная ... не определена».номер -2753 - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть этот код:

global logFilePath

Job("/Volumes/Work/test.log")

on Job(logFilePath)
  -- more code
  vlog("text")
  -- more code
end Job

on vlog(x)
   do shell script "echo \"" & (do shell script "date +' %H:%M:%S '") & x & "\" >> " & quoted form of logFilePath
end vlog

Я продолжаю получать error "The variable logFilePath is not defined." number -2753 from "logFilePath" из блока on vlog.

Почему?Разве я не объявил его глобальным?

Это работает, но менее элегантно:

global logFilePath, logFilePath2

Job("/Volumes/Work/test.log")

on Job(logFilePath)
  set logFilePath2 to logFilePath
  -- more code
  vlog("text")
  -- more code
end Job

on vlog(x)
   do shell script "echo \"" & (do shell script "date +' %H:%M:%S '") & x & "\" >> " & quoted form of logFilePath2
end vlog

1 Ответ

0 голосов
/ 20 декабря 2018

Переменная local logFilePath в обработчике

 on Job(logFilePath)

не является тем же объектом, что и переменная global с тем же именем, поэтому она действительноне определено.


Для ясности используйте другое имя

global logFilePath

Job("/Volumes/Work/test.log")

on Job(localPath)
    set logFilePath to localPath
    -- more code
    vlog("text")
    -- more code
end Job

on vlog(x)
    do shell script "echo \"" & (do shell script "date +' %H:%M:%S '") & x & "\" >> " & quoted form of logFilePath
end vlog

Или только с локальными переменными

Job("/Volumes/Work/test.log")

on Job(localPath)
    -- more code
    vlog("text", localPath)
    -- more code
end Job

on vlog(x, logFilePath)
    do shell script "echo \"" & (do shell script "date +' %H:%M:%S '") & x & "\" >> " & quoted form of logFilePath
end vlog
...