Home>Monologue> Part of Script factory. scriptfactory@mac.com .

Object SpecifierはHandlerを越えられない

〜Script Debugger 2.0.1のDebbuging modeにおける制限〜


Script Debugger 2.0では、ステップ実行時にpropertyとglobal変数だけでなく、なんとlocal変数までモニタすることができます。まあ、Debuggerというぐらいだから、これくらいはやってくれないとDebuggerと名乗って欲しくないのですが、それにしてもversion 1.0と比べると、とても大きな進歩です。

しかし!!それと引き換え、とても大きな代償を背負ってしまっております。

以下のスクリプトを見てください。このスクリプトはScript Debugger 2.0のDebugging modeではうごかんのです。

on run 
    tell application "Finder" 
        set theList to selection 
    end tell 
    revealInFinder(theList) 
end run 
  
on revealInFinder(theList) 
    tell application "Finder" 
        reveal theList 
    end tell 
end revealInFinder

上記のスクリプトは何の問題も無いはずです。実際、スクリプト編集プログラムでも、Script Debugger 1.0.5でもちゃんと動きます。

上記のスクリプトが動かない原因は、theListにFinder固有のファイル参照形式をおさめて、それを何の変換もせずに、handler 「revealInFinder」に渡していることです。もっと一般的に言えば、あるアプリケーション固有のobjectへの参照(Object Specifierと言うらしい)をhandlerに渡してしまっているということです。このスクリプトをちゃんと動かすには、revealInFinderに渡す前に、theListの中身をすべてaliasに変換してやる必要があります。

on run 
    tell application "Finder" 
        try 
            set theList to selection as alias list 
        on error number -1700 
            set theList to {selection as alias} 
        end try 
    end tell 
    revealInFinder(theList) 
end run 
  
on revealInFinder(theList) 
    tell application "Finder" 
        reveal theList 
    end tell 
end revealInFinder

この制限はかなり痛い!!上記の例では、aliasに変換できるからいいものの、AppleScriptに内蔵されているobjectに変換できない物の場合は、涙がちょちょぎれます。

この件についてLate Night Softwareに問い合わせてみました。

I'm aware of this problem.  At present, I have not found a way to resolve it
so you will have to avoid passing object specifiers between tell blocks as
you do in the example you give.  The workarounds are these:

- combine the tell blocks into a single handler
- convert the object specifiers into aliases

I realize these workarounds are far from perfect.  I'm working to identify
ways of improving the debugger to remove the limitation.

Cheers
-Mark

---------------------------------------------------------------------
Mark Alldritt                         Late Night Software Ltd.
Phone: 250-380-1725                   333 Moss Street
FAX:   250-383-3204                   Victoria, B.C.
WEB:   http://www.latenightsw.com/    CANADA  V8V-4M9

だそうです。「わかっちょる、ちょっとまて」といったところでしょうか?

というわけで、頑張ってにゃんまげ>Late Night Software


This page was last built on Wed, Feb 17, 2016 ; 11:09:48 AM . Thanks for checking it out!