0

我想定义一个可以这样调用的处理程序:

log format("Hello {}", "World")  -- #> Hello World
log format("Hello {}, {}", {"World", "Again"})  -- #> Hello World, Again

我在 SDEF 中定义了它:

    <command name="format" code="RTSUFRMT" description="">
        <direct-parameter type="text" description="Python style string interpolation"/>
        <parameter name="with" code="WiTo" type="list or text" description="..."/>
        <documentation>
            <html>
                <![CDATA[<p>format("Hello {}", "world"R<p>]]>]
            </html>
        </documentation>
    </command>

不幸的是,我的处理程序虽然仍然正常运行,但自动被重写如下:

on format {sourceText, tokens}
....
end format

如何让它保留语法handler("Hello", "World"),而不是format {"Hello {}", "World"}

4

1 回答 1

0

最简单的解决方案是摆脱 SDEF 并只写:

use _mylib: script "My Lib"

_mylib's format("Hello {}", "World")

当您想在 AS 处理程序上添加类似脚本的语法时,SDEF 就在那里。您可以将 SDEF 命令定义为format [string] using [list of anything](我建议将其命名format text以降低关键字冲突的风险)。但是,老实说,SDEF 往往比它们的价值更多的工作和麻烦。


ps 使一切变得愚蠢复杂,最多有 7 种不同且不兼容的方式来做同样的事情,而且永远无法正常工作,这是 AppleScript 的标准,唉。这是 AppleScript 已死在水中的部分原因,并且已经存在多年了。IMO,现在编写精炼的可重用通用库是在浪费时间。最好只做最简单的事情来完成手头的任务,然后等着看 Shortcuts 是否最终会在 WWDC 上登陆 macOS,以及 AS 是否有任何未来。

于 2021-04-17T14:37:32.360 回答