所有动态语言都是Typo友好的吗?

时间:2010-03-11 22:12:23

标签: dynamic-languages

一方面是Java,另一方面是Ruby / Groovy,我知道在第二个阵营中,我可以自由地制作一个在运行时才会被捕获的拼写错误。所有动态类型的语言都是如此吗?

编辑:我被要求详细说明拼写错误的类型。在Ruby和Groovy中,您可以使用从未读取的意外名称分配给变量。你可以调用那些不存在的方法(显然你的测试应该记住它,已经说过了)。您可以引用不存在的类等。基本上任何有效的语法,即使有印刷错误,在Ruby和Groovy中都是有效的。

4 个答案:

答案 0 :(得分:3)

在Perl中,如果您在代码中声明use strict,则必须使用my声明变量。变量名称中的拼写错误将在编译时捕获。这是我在Python编码时最想念的事情之一。

答案 1 :(得分:3)

Python就像你在问题中描述的那样typo-friendly

但这并不意味着这些“拼写错误”只能 被@ runtime运行。 当使用像pylint这样的代码分析器(理想地集成到您的开发环境中)时,在点击“运行”之前,您将始终捕获“大部分”

答案 2 :(得分:2)

在大多数情况下,是的。动态类型而不需要声明变量是经常一起找到的语言属性。

然而,这些并非本质上相关。语言可以轻松地进行动态类型,同时要求在使用前声明变量名称。正如ire_and_curses所提到的,这可以通过“use strict”指令在Perl中实现。

答案 3 :(得分:2)

当我试图陷入您在SqueakDolphin中提到的陷阱时会发生什么,这是动态语言Smalltalk 80的两种实现。

  

您可以使用永远不会读取的意外名称分配给变量

Smalltalk语言需要声明临时变量和实例变量。如果我尝试编译包含未定义变量的方法,则会出现编译时错误。

| anArray |
anArrray := Array with: 2 with: 1. "Unknown variable anArrray"

动态创建变量 不是动态语言必须允许的。无类型声明与完全没有声明之间存在差异。


  

您可以调用不存在的方法

如果您使用完全未知的选择器(即方法名称),编译器会发出警告。

如果我在数组上调用方法paint,编译器就不会打扰,因为实现paint的系统中还有另一个类。该错误只会在运行时捕获。

但是,如果我调用方法sortt(当我打算调用sort时),编译器会生成警告。在自上而下开发时,您可以继续传递这些警告。

| anArray |
anArray := Array with: 2 with: 1.
anArray paint. "Runtime error. You can't paint an array but perhaps a Shape"
anArray sortt. "Compile-time warning"

  

您可以参考没有的课程   存在

这是不允许的。虽然在Squeak中,如果需要,您可以从错误对话框中快速创建新类。