Applescript - 为什么我不能使用动态分配的类?

时间:2015-10-23 16:32:54

标签: applescript

如果我可以在Applescript中做最上面的程序,我为什么不能完成最底层的2个程序?

set _class to string
return ({"o", "k"} as string)

这是有效的,但最底层的不是。

set _class to string
return ({"o", "k"} as _class)

或者

set _class to string
return ({"o", "k"} as (class of "hello"))

该程序不允许我编译底部2。

2 个答案:

答案 0 :(得分:0)

因为类是在编译时计算的,因此必须是静态的。

答案 1 :(得分:0)

由于AppleScript的as运算符非常糟糕,您所能做的就是定义自己的处理程序,为您执行所需的转换。 (因为AS处理程序不是作为对象本身传递的,所以你需要将它们包装在脚本对象中。这一切都非常繁琐。)

script StringCoercion
    on coerceValue(theValue)
        (* caution: to guarantee predictable behavior, always set
           TIDs to a known value before coercing an unknown value
           to a string, just in case that value is a list *)
        set AppleScript's text item delimiters to ""
        return theValue as string
    end
end

script ListCoercion
    on coerceValue(theValue)
        return theValue as list
    end
end

set _class to StringCoercion
return _class's coerceValue({"o", "k"})
--> "ok"

或者,如果您不需要那么大的灵活性,只需使用条件块:

set _class to string
set theValue to {"o", "k"}

if _class is string then
    return theValue as string
else if _class is list then
    return theValue as list
else ...

老实说,你对这些事情的思考越多,你就会越多地意识到AppleScript对于那些没有自动化应用程序的一切[/ i]是多么糟糕。不幸的是,苹果公司提供的AS替代品很可能会使应用程序自动化,所以它几乎是Hobson的选择。

老实说,我能推荐的最好的方法是让你的AS代码尽可能简单,无聊,不聪明,希望它不太可能爆炸。