【问题标题】:AppleScript: Using "whose" with record values does not workAppleScript:对记录值使用“谁”不起作用
【发布时间】:2016-04-28 18:31:41
【问题描述】:

在我的脚本应用程序中,属性之一是命名记录类型,并且该记录类型也已在 sdef 中声明(命名为“自定义记录”)。

我可以得到这样的记录:

get owner of anElement
    --> {pool:"test", position:2}

我也可以像这样成功地测试它:

set target to {pool:"test", position:2}
if owner of anElement = target then
    -- found!

但我不能在 who 子句中使用它:

get allElements whose owner = target
    --> {}

我也不能在测试中使用missing value

get allElements whose owner = missing value
    --> error number -1700 from missing value to custom record

这是 AppleScript 的预期行为,即它是否无法处理 who 子句中的记录?

还是我做错了什么?到目前为止,我还没有实现任何强制处理程序或特殊记录处理程序,因为没有任何迹象表明我需要它们。

另外,请参阅我的相关问题:Cocoa Scripting: Returning "null" vs. "missing value"

【问题讨论】:

    标签: macos cocoa applescript cocoa-scripting


    【解决方案1】:

    简短回答:这是预期的行为。

    which 子句仅适用于 element 引用类型(具有对象说明符的类),但不适用于记录类型和自定义列表。

    即使是 Finder 的 selection 属性也不能被 who 子句过滤。

    【讨论】:

    • 啊,只有具有对象说明符的类才有意义。我会考虑将记录转换为单独的属性,以便更容易处理。记录中只有两个项目。我认为使用记录类型会使其在字典中看起来更清晰,但这并不是必需的。
    • 实际上 OP 的 AS 代码应该可以工作,因为他将查询应用于一对多关系 (allElements whose TEST),而不是记录数组。无法对包含记录的属性进行相等测试很可能是由于 Cocoa Scripting 有点粗制滥造并且未能正确执行 owner = {pool:"test", position:2} 测试。至于 missing value 失败,OP 应该检查他的 SDEF 在属性的类型声明中包含 <type type="missing value"/>
    • @foo 由于缺少NSScriptObjectSpecifier,其子句不适用于记录类型。这是事实。
    • @foo - 在“缺失值”类型上。如果我使用代码“msng”添加它,它仍然无法正常工作。我收到错误“无法将缺失值输入类型自定义记录”。数字-1700"
    • man 5 sdef; owner 属性应定义为 <property name="owner" code="..."><type type="custom record"/><type type="missing value"/></property>
    猜你喜欢
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多