我很惊讶没有人给出明显的答案,而且我怀疑这是实践中最常用的答案:只是不阅读错误消息。
大多数错误消息的价值中的绝大部分只是在某条这样的线路上出现了问题。大多数时候,我只是查看行号并转到该行。那时,我对错误消息的“阅读”通常只是我通过时所注意的,甚至不是掠过的内容。如果不能立即弄清线路上或线路附近出了什么问题,那么我将实际阅读该消息。使用IDE或工具突出显示错误并自动完成Karl Bielefeldt的建议,即只考虑较小的更改,此工作流程甚至更好。
当然,错误消息并不总是指向适当的行,但是它们也常常也不指向适当的根本原因,因此,即使是对错误消息的充分理解也将提供有限的帮助。很快就可以知道哪些错误消息对于定位正确的行更可靠。
一方面,大多数的错误是新手很可能使有可能是痛苦明显没有从编译器是必要的帮助有经验的程序员。另一方面,对于新手来说,它们变得如此明显的可能性要小得多(尽管许多缺陷是显而易见的,但大多数错误都是愚蠢的错误)。在这一点上,我完全同意Robert Harvey的观点,新手只需要对这种语言更加熟悉。这是不可避免的。引用了不熟悉的概念或看起来令人惊讶的编译器错误应被视为加深对语言知识的提示。同样,在编译器抱怨但您看不到代码为什么错误的情况下。
再次,我同意Robert Harvey的观点,即需要一种更好的利用编译器错误的策略。我已经在上面概述了一些方面,Robert Harvey的答案也提供了其他方面。甚至不清楚您的朋友希望如何使用这样的“词汇表”,而且这样的“词汇表”实际上不太可能对您的朋友有用。编译器消息当然不是介绍语言1概念的地方,“术语表”并不是更好的地方。即使对错误消息的含义进行了清楚的说明,也不会告诉您如何解决问题。
1但是,有些语言(例如Elm和Dhall(可能还有Racket))以及一些“面向初学者”的语言实现确实尝试这样做。从这个角度来看,MSalters建议使用不同的实现方式是直接相关的。我个人认为这样的事情令人信服,而且并不是针对正确的问题。这并不是说没有办法编写更好的错误消息,但是对我来说,它们倾向于围绕使编译器的信念和这些信念的基础更加清晰。