有没有办法在 Applescript 中模仿 类?
Is there a way to mimic classes in Applescript?
我目前正尝试在 Applescript 中创建一个新的“class”。我知道,不申请,技术上是做不到的。
但我试图用嵌入的方式模仿它 script
:
script specialText
property value : ""
on flip()
return reverse of (characters of my value) as string
end flip
end script
set x to specialText
set value of x to "Hello World"
x's flip()
效果很好,returns "dlroW olleH"
符合预期,但是:
script specialText
property value : ""
on flip()
return reverse of (characters of my value) as string
end flip
end script
set x to specialText
set value of x to "Hello World"
x's flip() = specialText's flip()
这个returnstrue
.
所以我现在的问题是,我可以在不让新变量引用原始变量的情况下做这样的事情吗?
关闭。 AS 没有 类,但您可以通过执行 script
块语句来创建脚本对象的新实例。
将其包装在这样的处理程序中:
to makeSpecialText()
script specialText
property value : ""
on flip()
return reverse of (characters of my value) as string
end flip
end script
return specialText
end makeSpecialText
通过调用处理程序创建新实例,例如:
set x to makeSpecialText()
set y to makeSpecialText()
set z to makeSpecialText()
您现在拥有绑定到 x
、y
和 z
的脚本对象的三个独立实例,每个实例都有自己的状态。
Apress 的 Learn AppleScript,第 3 版(我主要撰写)有一章是关于脚本对象的,涵盖了库(现在已经半过时了,因为 AS 终于在 macOS 10.10 中获得了本机库支持)和面向对象编程(合理考虑到一本 1000 页的书的长度限制。
警告:此解决方案非常占用内存,不建议这样做! Foo 的答案(被接受的答案)很可能更符合您的需求。
另一种方法是使用 copy
语句:
script specialText
property value : ""
on flip()
return reverse of (characters of my value) as string
end flip
end script
copy specialText to x
set value of x to "Hello World"
log x's flip() = specialText's flip()
log specialText's flip()
(*false*)
(**)
请注意 copy
命令的语法与 set
命令不同。所以它不是 copy newVariable to oldVariable
而是 copy oldVariable to newVariable
.
我目前正尝试在 Applescript 中创建一个新的“class”。我知道,不申请,技术上是做不到的。
但我试图用嵌入的方式模仿它 script
:
script specialText
property value : ""
on flip()
return reverse of (characters of my value) as string
end flip
end script
set x to specialText
set value of x to "Hello World"
x's flip()
效果很好,returns "dlroW olleH"
符合预期,但是:
script specialText
property value : ""
on flip()
return reverse of (characters of my value) as string
end flip
end script
set x to specialText
set value of x to "Hello World"
x's flip() = specialText's flip()
这个returnstrue
.
所以我现在的问题是,我可以在不让新变量引用原始变量的情况下做这样的事情吗?
关闭。 AS 没有 类,但您可以通过执行 script
块语句来创建脚本对象的新实例。
将其包装在这样的处理程序中:
to makeSpecialText()
script specialText
property value : ""
on flip()
return reverse of (characters of my value) as string
end flip
end script
return specialText
end makeSpecialText
通过调用处理程序创建新实例,例如:
set x to makeSpecialText()
set y to makeSpecialText()
set z to makeSpecialText()
您现在拥有绑定到 x
、y
和 z
的脚本对象的三个独立实例,每个实例都有自己的状态。
Apress 的 Learn AppleScript,第 3 版(我主要撰写)有一章是关于脚本对象的,涵盖了库(现在已经半过时了,因为 AS 终于在 macOS 10.10 中获得了本机库支持)和面向对象编程(合理考虑到一本 1000 页的书的长度限制。
警告:此解决方案非常占用内存,不建议这样做! Foo 的答案(被接受的答案)很可能更符合您的需求。
另一种方法是使用 copy
语句:
script specialText
property value : ""
on flip()
return reverse of (characters of my value) as string
end flip
end script
copy specialText to x
set value of x to "Hello World"
log x's flip() = specialText's flip()
log specialText's flip()
(*false*)
(**)
请注意 copy
命令的语法与 set
命令不同。所以它不是 copy newVariable to oldVariable
而是 copy oldVariable to newVariable
.