随着动态类型语言的发展,因为它们给了我们更多的灵活性,人们很可能会编写超出规范允许范围的程序。
当我阅读bobince的答案时,我的想法受到了这个问题的影响: 关于JavaScript的切片和拼接方法的问题
基本思想是splice
,在 Javascript 中,被指定为仅在某些情况下使用,但是,它可以在其他情况下使用,并且该语言无法阻止它,因为该语言被设计为非常灵活.
除非有人通读规范并决定遵守它,否则我相当肯定会发生许多此类违规行为。
这是一个问题,还是编写这种灵活语言的自然延伸?或者我们应该期望像 JSLint 这样的工具来帮助成为规范警察?
我喜欢这个问题的一个答案,python 的实现就是规范。我很好奇这是否真的更接近这些类型的语言的真相,基本上,如果语言允许你做某事,那么它在规范中。 有 Python 语言规范吗?
更新:
在阅读了一些评论之后,我想我会检查规范中的拼接方法,这就是我在 pg 104 底部找到的,http://www.mozilla.org/js/language/E262-3。 pdf,所以看来我可以在不违反规范的情况下在子数组上使用拼接。我只是不希望人们在我的示例中陷入困境,但希望能够考虑这个问题。
The splice function is intentionally generic; it does not require that its this value be an Array object.
Therefore it can be transferred to other kinds of objects for use as a method. Whether the splice function
can be applied successfully to a host object is implementation-dependent.
更新 2: 我对 JavaScript 不感兴趣,但对语言灵活性和规范不感兴趣。例如,我希望 Java 规范指定您不能将代码放入接口中,但使用 AspectJ 我经常这样做。这可能是一种违规,但作者并没有预测到 AOP,并且该工具足够灵活,可以用于此用途,就像 JVM 也足够灵活,可用于 Scala 和 Clojure。