Delphi中的EProgrammerNotFound异常?

145
在Delphi 2009中,SysUtils.pas文件的第425行包含以下内容:
EProgrammerNotFound = class(Exception);
  • 这只是一个复活节彩蛋,还是有什么严重的问题?
  • 在什么情况下应该引发此异常?
  • 它是否也存在于Delphi Prism和/或Free Pascal中?

问题:这个异常类在Delphi中是否仍然声明(目前是XE7)?

答案:是的,甚至有文档证明!

非标准的指示软件故障的方式。

您可以使用EProgrammerNotFound作为替代方案,以指示在运行时检测到的软件故障。


4
最近,关于Android的UserManager.isUserAGoat()函数的一个答案在这里提到了这个异常。 - mjn
我认为这个设计模式值得一个正式的名称。我在这里也看到了它:YourCodeSucksException - Gungwald
8个回答

165

这只是一个漫长的一天的结果,我们有点兴奋。多年来(自我加入团队以来),我们总是开玩笑地将编译器中某些常见错误的错误消息替换为类似的消息。在内部,我们总是开玩笑和取笑不同的事物和人(主要是团队本身)。如果你没有幽默感,那么你注定要早死。

这只是一个简单的对话;

"哦,你应该在那个函数中引发EProgrammerNotFound异常。"
“LOL!我们应该添加这个异常并看看谁会注意到。”
“我想知道会有多少猜测关于它为什么存在?”

所以,我想我只能说,“你们都被我们耍了;-)... Buwahahaha! 被掌控了!”


10
这不是Tron中最常见的例外情况吗? - LaKraven
1
这种异常很合理。我总是把这个异常视为 ENotImplementedException。 - stanleyxu2005
6
@stanleyxu2005,你可以使用 ENotImplemented 异常来实现该功能。 - TLama
我有一个自定义的 EProgrammerException。当我在输入代码以完成 EProgr... 时,代码提示显示了 EProgrammerNotFound。不幸的是,我不能使用 EProgrammerNotFound,因为我的 EProgrammerException 是从 EInvisibleException 继承而来的;它被设计成介于断言失败和 EAbort 异常之间(我捕捉到程序员搞砸了什么,我要在这里停止)。 - Ian Boyd

26

它与“fix-inline”技术一起使用,需要程序员链接到exe文件中;-)


23

它在Delphi 2009中被引入,仍然存在于Delphi 2010中,并且最近互联网上引起了一些更多的关注。

我认为这是一个彩蛋,类似于 "EBCAK"(键盘和椅子之间的错误),以及跳过Delphi版本号13

EProgrammerNotFound

  • 在SysUtils单元的Win32分支中声明,但没有在RTL或VCL中使用
  • 不在Delphi Prism中出现
  • 在Delphi 2009中引入,因此不在VCL.NET中
  • 目前(版本3.5)在.NET框架中没有类似的功能(不确定为什么,这些人有幽默感
我认为EProgrammerNotFound实际上并不是用来使用的,但既然存在,人们会开玩笑地使用它(类似于在别人的源代码中放置一个偏离的“const False = True; True = not False;”)。
-- jeroen

2
嗯,程序员不仅是一个人,还是一种设备(用于编程例如嵌入式设备的闪存)。我在这里闻到了 iPhone 的味道吗?不,那应该在 IDE 源代码中,而不是 sysutils。 - Marco van de Voort
8
EBCAK?我经常听说它被表达为PEBKAC。(问题存在于键盘和椅子之间。) - Mason Wheeler

12

6
这是运行时版本的编译器中的“语法错误:程序员期望”的类比。

2
你应该已经看到了使用本地化为Jive的编译器字符串构建的情况! - dthorpe

5

这是一种自我描述的笑话,您可以尝试以下代码

raise EProgrammerNotFound.Create('Jack is away');

或者

raise ENotImplemented.Create('May be in future this will work');

以上内容适用于Delphi 10 Seattle。

3

在程序员的世界里,被提到的并不是坐在Delphi后面的程序员。我认为这是因为在D2009及以上版本中,他们计划(但从未使用过,也不知道它是否有效)使每个对象都可等待。


实际上它是可用的。您可以将任何对象传递给 TMonitor.EnterTMonitor.Exit。而且我不确定它是否是彩蛋…… - jpfollenius
1
一个对象是否可等待与程序员或他们是否被发现有什么关系?而且,到底是哪个程序员被提到了呢? - Rob Kennedy

0

我是一名程序员,难道我不同寻常吗?

Marco Cantù 在他的书《Delphi 2009手册》第242页中也描述了这一点。他说它从未在VCL源代码中使用过。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接