Expensive Egg Timers

楽土

如果你使用 CLI,你可能已经做了一些类似的事情。

sleep 1m 30s; do-the-next-thing

我有一个名为OK的脚本,它将通过PC扬声器显示一段充满希望的绿色短文和摩斯密码O-K。通过这样做,我把我的电脑变成了一个昂贵的鸡蛋计时器。

最近,我发现自己等待的时间越来越长,而且缺少一个倒计时,这样我就可以估计自己还能浪费多少时间玩电脑游戏。结果就是一个叫倒计时的程序。

由于我想尽可能地模仿 sleep 的行为,我曾偷看过它的源代码。这让我意识到我是多么幸运,可以使用 Perl 6。如果我把倒计时所需的所有额外的部分去掉,我只有33行代码,而 GNU sleep 只有154行。我的模板主要是为了可读性。比如定义了一个叫 Seconds 的子集和一个叫 number 的 Regex。

脚本参数中的错误将由 MAIN 签名中的 where 子句来解决。由于 MAIN 没有其他可能干扰的多候选者,如果参数不被识别,将自动显示使用信息。在 C 语言的实现中,几乎所有的行都是关于参数处理的,而且在最后一点处理完成之前,他们不能相信他们的参数。通过适当的签名,Perl 6 Routine 可以完全信任它的参数,不需要进一步的错误处理。与C版相比(做得少了很多),代码可以从上到下线性阅读,表现力更强。改了几个标识符之后,我觉得不需要再做注释了。即使是一些不清晰的代码,比如数字上的拆分和保留数值,在接下来的几行中也变得清晰起来,我在这里总结了一个秒数列表。

现在我可以舒舒服服地倒数一年剩下的时间了,这一年因为有了一个做得更好的 Perl 6 而变得更好。祝大家2018年快乐。

by gfldex

comments powered by Disqus