You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AppleScript中模拟类且避免新变量引用原脚本对象问题

问题原因

你遇到的返回true的问题本质是:AppleScript中set命令对script对象执行的是引用赋值,你赋值给x的只是原specialText脚本的内存地址,修改x的属性等价于修改原脚本的属性,二者完全共享数据。

解决方案

方案1:使用copy命令创建独立实例

AppleScript的copy命令对script对象会执行拷贝操作,生成完全独立的新实例,替换原代码里的set即可:

script specialText
    property value : ""
    on flip()
        return reverse of (characters of my value) as string
    end flip
end script

-- 用copy替代set,创建独立实例
copy specialText to x

set value of x to "Hello World"
-- 单独修改原脚本的属性
set value of specialText to "Other Value"

-- 此时返回 false,两个实例属性已独立
x's flip() = specialText's flip()

方案2:工厂构造函数(更推荐)

这种写法更贴近常规面向对象语言的类使用逻辑,不需要维护原型脚本,每次调用构造函数就会生成全新的独立实例,还支持传入初始化参数:

-- specialText类的构造函数
on newSpecialText(initValue)
    script instance
        property value : initValue
        on flip()
            return reverse of (characters of my value) as string
        end flip
    end script
    return instance
end newSpecialText

-- 创建两个完全独立的实例
set x to newSpecialText("Hello World")
set y to newSpecialText("Test Text")

-- 输出 dlroW olleH
x's flip()
-- 输出 txeT tseT
y's flip()
-- 对比返回 false,实例之间完全不共享数据
x's flip() = y's flip()

这种构造函数方案可以避免误操作修改原型脚本的问题,扩展性更强,后续要加成员方法、参数校验都可以直接在构造函数内实现。

内容的提问来源于stack exchange,提问作者gurkensaas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:48:01