首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘global`断言?

‘global`断言?
EN

Stack Overflow用户
提问于 2011-04-09 18:42:46
回答 2查看 121关注 0票数 0

是否有任何语言可以声明global断言-即在整个程序执行过程中应该保持的断言。这样就可以编写类似这样的代码:

代码语言:javascript
复制
global assert (-10 < speed < 10);

每次speed更改状态时,都会检查此断言吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-09 19:08:57

我不知道有哪种语言能真正做到这一点,我怀疑是否存在这样的语言,因为它是很难实现的东西,同时也不是很多人需要的东西。

通常,更好的方法是简单地断言输入是有效的,并且只有在允许的情况下才会以定义合理的方式进行修改。这就结束了对“全局断言”的需求。

你可以通过几种方式“通过后门”获得这种效果,尽管没有一种是真正优雅的,有两种是相当依赖于系统的:

  • 如果您的语言允许操作符重载(例如C++),则可以创建一个重载任何修改该值的操作符的类。这是一项相当大的工作,但另一方面,在那里做断言是微不足道的。
  • 在几乎每个系统上,您都可以更改属于您的进程的内存页的保护。您可以单独放置该变量(以及您想要断言的任何其他变量),并将页面设置为只读。当值被写入时,这将导致分段错误,您可以捕获该错误(并验证断言是否为真)。Windows甚至通过“保护页”(实际上只是“disguise").
  • Most现代处理器中支持硬件断点的只读页”)显式地提供了这一点。除非您的程序要在一些非常奇特的平台上运行,否则您可以利用这些平台,以类似于篡改保护的方式来获得更细粒度的控制。参见另一个站点上的示例this article,其中描述了如何在x86上的Windows下执行此操作。这个解决方案需要你编写一种“迷你调试器”,这意味着当你在一个真正的调试器下运行你的程序时,你可能会遇到麻烦。
票数 -1
EN

Stack Overflow用户

发布于 2011-04-09 19:08:40

eiffel支持所有不同的合同:前置条件,后置条件,不变...你可能会想要用它。

另一方面,为什么会有一个全局变量呢?为什么不创建一个修改速度的类。这样做,您就可以在每次值发生更改时轻松地检查您的条件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5604521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档