如果我可以在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。
答案 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代码尽可能简单,无聊,不聪明,希望它不太可能爆炸。