红宝石是强力还是微弱的打字?

时间:2009-02-06 13:12:22

标签: javascript ruby typing

红宝石是强烈还是弱类型?

据推测,Javascript也是如此。

7 个答案:

答案 0 :(得分:42)

Ruby是“强类型”。

强类型意味着对象的类型(不是在OOP意义上,但在一般意义上)在执行需要某种类型的操作之前被检查。

弱类型表示不进行检查以确保操作可以在对象上成功。 (例如,当函数访问字符串和浮点数组时,如果没有进行类型检查,则允许操作)

编辑: 这个答案发布已经过去了6年,我认为这需要一些额外的澄清:

多年来,“类型安全是表盘不是绝对的”这一概念开始被用于支持二元意义(是/否)

与大多数典型的动态语言相比,Ruby是“更强”的类型(带有“呃”)。 ruby需要明确的转换语句IE:Array(“foo”),“42”.to_i,Float(23)这一事实使得Ruby输入表盘更接近“强类型”结束而不是“弱类型”

所以我会说“Ruby是比大多数常见动态语言更强大的动态语言”

答案 1 :(得分:26)

Wikpedia将其标记为“动态('duck')键入”。

关于Pop关于它是“强类型”的评论 - 我不确定他的解释是否真的符合封面下的内容。 MRI没有真正“检查”以查看是否可以对对象执行操作;它只是向对象发送消息,如果该对象不接受该消息(通过方法声明或在#method_missing中处理它)barfs。如果运行时实际检查以确保可以进行操作,则#method_missing将无效。

此外,应该注意的是,由于Ruby中的所有内容都是一个对象(我的意思是所有内容),我不确定他所说的“不是在oo-sense中”是准确。在Ruby中,您既可以是对象,也可以是消息。

答案 2 :(得分:11)

虽然你可以进入有关这些术语定义的论据,但我会说:

Ruby动态且强类型化,而JavaScript是动态和弱类型的。

答案 3 :(得分:8)

恕我直言Ruby强烈但动态地输入。

答案 4 :(得分:3)

我会考虑这些语言duck typed

答案 5 :(得分:1)

我只是偶然发现了这个老话题,但是我认为我可以发表自己的看法是适当的。 (不,我不是在“劫持”僵尸线程。)

我的口语对术语“强类型™” 的口语解释特别是指 “编译”时间。” (当今,包括Ruby在内的许多语言都“根本没有这种东西。”)

例如,编译器根据对{{1}的“类型”的评估,可以判断编译器 这样简单的赋值语句,例如a = b; }和a,并基于程序员提供的类型转换(如果适用)的规定。如果判断该语句不可接受,则将抛出编译时错误,并且永远不会产生“可执行文件”。

当然,此概念与Ruby,PHP,Perl,JavaScript或当今使用范围非常广(且非常成功)的许多其他语言的基本设计规范不兼容。 。 (请记住,我并不是说这是对他们的支持或对他们的“判断”。它们是它们的本质,它们肯定会把培根带回家。)

由于这些语言没有“编译时间”,因此对于我(!)口语而言,它们不能被称为“强类型”。他们有义务在运行时做出 的决定,根据他们的设计,这些决定不可能很快做出。


(还请注意,我是专门排除针对此语言而出现的各种“ b工具”,以试图提前捕获更多错误。这些功能非常有用,是的是的,但不是同一件事。)

(出于同样的原因,我也特意排除了各种优秀的(!)工具,它们可以在各种目标语言中生成源代码。)

而且-我再说一次-我正在进行分类,而不是判断。

答案 6 :(得分:-1)

过于简化的答案是ruby和javascript都是弱类型的。

然而,这个问题并不像看起来那么明确 - 请参阅this wikipedia article,深入讨论强类型和弱类型语言之间的区别。

相关问题