在Applescript中打高尔夫球的技巧


13

您在Applescript中打高尔夫球有哪些秘诀?我正在寻找可以应用于一般至少在某种程度上特定于Applescript的高尔夫问题代码的想法(例如,“删除评论”不是答案)。


这个问题太广泛了。不可能用一个完整,写得很好的答案来回答问题(甚至明确禁止该问题)。
Rainbolt 2014年

1
尽管如此,这只是一个有趣的问题:)
MadTux 2014年

5
标记为转换为CW(按照我们关于“打高尔夫球的技巧”的约定)。
Geobits 2014年

@MadTux是的,Applescript通常不是打高尔夫语言的第一选择;-)。 但是在某些情况下,尤其是在受限源类别中,它变得微不足道。
Digital Trauma 2014年

4
@Rainbolt这本质上与x问题中的其他高尔夫技巧什么不同?
Digital Trauma 2014年

Answers:


6

of操作被用来从一个对象的属性:

log words of "Hello World"

但是在许多情况下,您可以使用's快捷方式保存1个字符:

log "Hello World"'s words

6
Applescript将撇号解析为所有格似乎有些荒谬,但也有些令人敬畏。我可以想像其中一位语言设计师向这个小组介绍这个想法。
Geobits 2014年

9
@Geobits这些是描述Applescript的好形容词。我只是还没有决定Applescript是太荒谬了还是太荒谬了;-)
Digital Trauma

4

Applescript编辑器是一个方便的小IDE,可以语法突出显示和美化您的代码。但是,出于打高尔夫球的目的,它适得其反,因为它增加了缩进和多余的关键字,例如在end语句之后。例如:

repeat with w in "Hello World"'s words
log w
end

粘贴到Applescript编辑器并编译/运行时,将变为以下内容:

repeat with w in "Hello World"'s words
    log w
end repeat

显然,第一个片段对于打高尔夫球更好。


IMO可以将其视为一般性提示,而不是仅针对AS。如果允许的话,许多现代IDE都会这样做。
Geobits 2014年

2
@Geobits同意。尽管我认为在其后添加特定的关键字end是特定于Applescript的。
Digital Trauma 2014年

是的,这让我感到困惑。缩进/间距的事情是很常见的,但是,不必要的支架沿等
Geobits

@Geobits Applescript都是关于可读性的。我想这是要弄清楚end当您有多个嵌套块时,哪个块属于哪个块开始语句
Digital Trauma 2014年

4

tell 块在Applescript中很常见:

tell application "TextEdit"
    activate
end tell

但是,为了节省空间,当tell块的内部仅一行时,以下内容等效:

tell application "TextEdit" to activate

3
本身就是tell app "TextEdit" to activate
wchargin 2014年

@WChargin是的。如果愿意,可将其添加为另一个答案。
Digital Trauma 2014年

4

有些单词的同义词较短。例如,application可以写为app*,string也可以写为text

另外,every <noun>可以简单地写成复数形式,如characters of "hello world"(或"foo"'s characters)。

*尽管脚本编辑器的编译器会将其改回。


3

报价所需操作

对于需要引用执行某项操作的任何操作,即

登录“ Hello World!”

您可以缩短为

登录“ Hello World!”

重覆

在重复循环中,可以完全删除单词“ times”。

重复x次
结束

重复x
结束

<=和> =

每次调用这些运算符时,都可以分别用和替换它们。尽管这可能不会减少字节数(除非实现特殊的字节计数约定,否则我建议这样),但确实会减少字符数。

来自STDIN的抢夺

您可以使用以下字符从STDIN中进行抓取:

在运行argv
结束

快速退出

如果您需要快速退出代码(无论出于何种原因,即防止使用过多的ifs)...

放弃

哈哈哇,您必须做点拖网才能找到它;)
Beta Decay

我用它了很多
Addison Crump 2015年

问题还是提示?
Beta Decay

提示。和AppleScript一般。
艾迪生·克伦普

哦,我当时在谈论这个问题:)
Beta Decay

2

Applescript允许插入一些额外的关键字以提高可读性:

log the words of "Hello World"

但是the这里完全多余,可以省掉4个字符:

log words of "Hello World"

2
您甚至可以使用更短的变体:log"Hello World"'s words,因为您1)不需要在任何表达式和引用的项目之间加空格,并且2)因为's可以用于替换of
艾迪生·克伦普

@VTCAKAVSMoACE是的,'s此答案codegolf.stackexchange.com/a/37643/11259中已解决。很高兴知道log"
Digital Trauma 2015年

2

缩短支架

与关于报价的帖子类似,我后来意识到,您也可以缩短以下内容:

如果“ a” =(x作为字符串)的字符1,则返回{true,true}

如果“ a” =(x作为字符串)的字符1,则返回{true,true}

它也会为您隔开括号。在此示例中,我保存了5个字节。


2

考虑中...

在需要区分大小写的问题中,可能很难实际处理案例。

到现在:

考虑情况
    (与区分大小写的东西有关)
结束考虑

直到我真正需要它之前,我才真正知道它。使用此提示页面中的其他提示,我们可以将其减少为:

考虑情况
(与区分大小写的东西有关)
结束

据我所知,它确实需要完整的陈述。(我尝试了很多事情。)有关更多详细信息,请参见此页面


1

在某些特殊情况下,“双尖括号”或“双人字形”可能比命令,参数或常量的英文名称短。

人字形编码的表单将收缩AppleScript,以将剪贴板从20个字符删除为16个字符:

set the clipboard to  -- 20
«event JonspClp»      -- 16

从对话框中获取文本时,它会掉2个字符(就像节拍器Pi Day一样):

(display dialog""default answer"")'s text returned  -- 46
(display dialog""default answer"")'s«class ttxt»    -- 44

(如果您至少具有Mac OS X 10.4,则可能希望避免出现对话框,而使用osascript(1)的命令行参数。)

使用美国键盘时,«是option- \,而»是option-shift- \。一个命令«event abcdefgh»有16个字符。参数或常量«class abcd»包含12个字符。

人字形编码的形式对于高尔夫几乎总是太长了。这是一个没有双尖括号的示例:

set x to open for access"output"write permission 1
write"One line of text
"to x
close access x

和他们一样:

set x to«event rdwropen»"output"given«class perm»:1
«event rdwrwrit»"One line of text
"given«class refn»:x
«event rdwrclos»x

_open for access(16)更改为«event rdwropen»(16)是中性的。将write permission_(17)更改为given«class perm»:(18)需要1个字符。其他双尖括号的价格更高。

要使用双尖括号,您需要知道神奇的4字母或8字母代码。通过从脚本编辑器中保存脚本文件,然后在十六进制编辑器中将其打开,我找到了一些代码。我emacs在航站楼里跑了,习惯了M-x hexl-find-file。我发现和编辑的一些代码,就像JonspClp进入JanspClp,并ttxt进入atxt。然后,我保存了文件并在“脚本编辑器”中将其重新打开。«event JanspClp»«class atxt»出现在脚本中。

名为AppleScript术语和Apple事件代码参考的文档列出了一些代码。我在https://applescriptlibrary.wordpress.com/找到了它的副本

在保存脚本之前,脚本编辑器会将双尖括号翻译为英语。为了人字形尊重,您必须在另一个文本编辑器(例如TextEdit)中编写脚本。将脚本另存为Mac OS Roman(或MacRoman)编码的纯文本文件。Mac OS X最好使用.applescript后缀来命名文件。

如果计算字节数,则MacRoman每个字符有1个字节,因此每个«或»都计为1个字节。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.