问题描述
我正在尝试(并且失败)找到对语言或环境或编辑器插件的引用,而程序员不必正确地拼写方法/对象/等...。
相反,该语言在查找过程中使用智能试探法,并在给定上下文的情况下为呼叫选择最可能的解释。
有人造过类似的东西吗?我在哪里/如何找到它?
解决方法
是的。 DWIM mode,Teitelman,1966年。
(请注意,对于LISP系统,编程语言和用户界面之间的界限不一定是清晰的)
,好吧,我最初在this tweet中看到了这段代码:
>>> def method_missing(n,*a,&b); send(methods.min_by { |m| levenshtein(n.to_s,m.to_s) },&b); end
>> p [1,2,3].elngth
3
该代码正在执行的操作是重写ruby的method_missing
方法,如果使用某个对象上不存在的方法调用该对象,则会调用该方法。在被覆盖的method_missing
方法内部,它正在查看给定对象上的所有方法,并找到名称最短的Levenshtein distance的方法,然后调用它,并假定它正是程序员的意思! / p>
第二行然后说明,这将导致在调用不存在的length
方法时调用Array
上的elngth
方法。
根据this answer,代码是否真正起作用而不是进入无限递归循环似乎在很大程度上取决于您的特定红宝石环境。
,在编译时,我不敢以此来信任计算机。
某些IDE确实会检测拼写错误并在让您进行编译之前提供建议,我认为这是处理此类情况的最佳方法。
最近,我一直在考虑创建一个开发环境,在该环境中,您实际上告诉计算机要使用的应用程序,功能和接口以及为您创建的应用程序,并尽可能地猜测出您实际想要和想要的。我正处于研究阶段,了解有关NLP和机器学习的更多信息。
,我认为通过将简单的递归贝叶斯定理应用于由单词(函数和关键字)数据集建立的条件概率图上,我们可以在Peter的spell.pi线上设计一个有用的代码拼写校正器诺维格。