Ruby是弱类型语言还是强类型语言?
JavaScript也可能是相同的情况。
Ruby是弱类型语言还是强类型语言?
JavaScript也可能是相同的情况。
Ruby被称为"强类型"语言。
强类型意味着在执行需要特定类型的操作之前,会检查对象的类型(不是面向对象编程中的类型,而是一般意义上的类型)。
弱类型意味着不会对对象进行任何检查以确保操作可以成功。例如,当函数访问类似于浮点数数组的字符串时,如果没有进行类型检查,则允许进行操作。
编辑:距离这个答案发布已经过去6年了,我认为需要一些额外的澄清:
多年来,“类型安全是一个刻度而不是绝对”的概念开始被用来代替二进制的意义(是/否)
Ruby比大多数典型的动态语言更加“强”(使用“er”表示)。Ruby要求显式声明转换,例如Array("foo"), "42".to_i, Float(23),这使得Ruby的类型刻度更接近于“强类型”端而非“弱类型”端。
因此,我会说“Ruby是比大多数常见的动态语言更强类型的动态语言”。
维基百科将其标记为“动态(‘鸭式’)类型”。
关于Pop评论中它被称为“强类型” - 我不确定他的解释是否实际上符合底层发生的情况。MRI并没有真正“检查”对象上是否可以执行操作;它只是向对象发送消息,如果该对象不接受该消息(通过方法声明或在#method_missing中处理),则会出现错误。如果运行时实际上检查以确保操作是可能的,#method_missing就无法工作。
此外,应注意的是,由于Ruby中的所有内容都是一个对象(我确实指的是所有),我不确定他所说的“不是在面向对象的意义上”是否准确。在Ruby中,您要么是一个对象,要么是一条消息。
虽然你可以就这些术语的定义进行争论,但我认为:
Ruby是一种动态和强类型语言,而JavaScript是一种动态和弱类型语言。
我认为Ruby是一种强但动态类型的语言。
简单来说,Ruby和JavaScript都是弱类型语言。
然而,这个问题并不像看起来那么简单 - 可以参考这篇维基百科文章,深入讨论强类型语言和弱类型语言之间的区别。
a = b;
,可以通过编译器的评估来判定是否可以接受,基于它对a
和b
的“类型”的评估,并基于程序员提供的类型转换的规定(如果适用)。如果该语句被判定为不可接受,则会抛出编译时错误,永远不会产生“可执行文件”。lint
工具”,试图提前捕捉更多的错误。是的,它们非常有用,但并不是同一回事。)