是否可以使用类型推断的Ocaml / Haskell算法为Python建议更好的自动填充?
这个想法是建议自动完成,例如在以下情况下:
class A:
def m1(self):
pass
def m2(self):
pass
a = A()
a. <--- suggest here 'm1' and 'm2'
fun1(a)
def fun1(b):
b. <--- suggest here 'm1' and 'm2'
有什么好的起点吗?
答案 0 :(得分:9)
很好的讨论,有很多指针here(有点过时了)。我不相信任何“制作”编辑都会主动尝试使用类型推理来实现自动完成目的(但我有一段时间没有使用过例如翼软件,所以也许他们现在就这样做了。)
答案 1 :(得分:2)
您可以查看Pharo Smalltalk中的ECompletion和OCompletion。对于python来说,妥协可能会有所不同,但是在实践中通过一些保守类型推理进行有根据的猜测。这也取决于您是否希望完成替换浏览代码/文档,或帮助打字并避免拼写错误。
我认为在Pharo中,如果消息是对类(SomeClass m
)的显式发送,那么它当然会提出该类及其超类中的所有消息。否则,它只是猜测系统中与类型前缀匹配的所有方法名称,并且效果很好。 OCompletion根据编辑历史添加了一些启发式优先级。
答案 2 :(得分:1)
第一种情况是“容易”,我打赌JetBrains' PyCharm可以做到这一点。我没有使用过PyCharm,但我确实使用了IDEA,也是JetBrains,用于基于Groovy的开发(一种动态语言),并且它具有非常好的,非常积极的自动完成功能。第二种情况会更困难,您希望IDE根据其用途推断fun1
的类型。在没有泛型的语言中,这可能是合理的。但是,至少在F#/ VS2010中(这可能类似于OCaml / Haskell),编译器/ IntelliSense推断fun1
具有签名'a -> 'a
(即,一个通用的函数)键入'a
并返回泛型类型'a
),因此IntelliSense非常小。
答案 3 :(得分:0)
正确的处理方法需要Python的类型系统,这将是一个有趣的研究问题。