我可以在Perl中编写DSL吗?
我们使用Perl进行GUI测试自动化.这是非常成功的.我们已经编写了一种非常轻量级的DSL语言来进行GUI测试. DSL非常类似于对象模型.
例如,我们在根目录下有一个Application对象.应用程序中的每个属性表都是一个View对象.页面下的每个页面都被称为页面对象本身. socket_object->send_command("App.View2.Page2.Activate()") socket_object->send_command("App.View1.Page3.OKBtn.Click()") 这不是很可读.相反,我想为App,View和Page写一个Perl DSL. App.View2.Page2.Activate(); App.View1.Page2.Click(); 应用程序应该是应用程序类的一个实例.我必须在运行时获取View2的对象. 如何使用这样的东西? 解决方法
你几乎可以在Perl中做任何事情.但是你必须做一些奇怪的事情来让Perl执行一些只是不是Perl的语法.
>为了正确处理你在那里的事情,你必须有很多先进的技巧,根据定义,这不是可维护的.你必须: > overload连接运算符”. (需要有福的参考) >另一种方式是source filters,我可以拿起一个downvote,只是为了提到这个能力.所以我不会为那些要求帮助的人推荐这种方法.但它在那里.来源过滤器(和我已经完成了我的分享)只是其中一个可以认为你太聪明的领域. 不过,如果您对Perl作为DSL“主机”语言感兴趣,那么source filters不是完全不受限制的.然而,将这个限制在你想要做的事情上,Perl6::Attributes可能会大部分时间完成你所需要的工作.这将需要并将它们翻译成“ – >” Perl会明白.但是您仍然可以查看源过滤器来了解幕后发生的情况. 我也不想离开这个话题,而不是建议您使用Damian Conway的Filter::Simple来缓解您生成自己的源代码过滤器(我建议不要做)的很多挫败感. App->View2->Page2->Activate(); App->View1->Page2->Click(); 应用程序将是一个包或一个子.在当前包中定义的或导入的,它将一个带有View2子(可能是一个 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |