是强烈还是弱类型的红宝石?
Ruby是“强类型”。
强键入意味着在执行需要特定类型的操作之前检查对象的类型(不是OOP意义上的,而是一般意义上的)。
弱类型意味着不进行检查以确保操作可以在对象上成功。 (例如,当一个函数访问字符串和浮点数组时,如果没有进行类型检查,则允许该操作)
编辑: 已回复6年,这个答案已发布,我认为它可以保证一些额外的澄清:
多年来的概念,即“类型安全是拨号不是一个绝对的”开始赞成二进制含义使用(是/否)
Ruby是“强”类型(有一个“呃”)比大多数典型的动态语言。 ruby需要明确的语句来转换IE:Array(“foo”),“42”.to_i,Float(23),使Ruby打字拨号靠近“强类型”谱端,而不是“弱类型” 。
所以我会说:“Ruby是比最常见的动态语言更强的类型的动态语言”
过分简化的答案是,ruby和javascript都是弱类型的。
然而,这个问题并不像看起来那么明确 - 参见this wikipedia article,以便更深入地讨论强类型语言和弱类型语言之间的区别。
似乎是相互矛盾: http://www.rubyfleebie.com/ruby-is-dynamically-and-strongly-typed/ 奇妙而又奇妙 ? – weepy 2009-02-06 13:36:50
恕我直言,Ruby强烈但动态类型。
虽然你可以进入那些术语的定义参数,我们会说:
红宝石动态和强类型的,而JavaScript是动态和弱类型。
Wikpedia标签为“动态(‘鸭’)输入”。
关于Pop对其“强类型”的评论 - 我不确定他的解释实际上是否与下面的内容相符。 MRI并不真正“检查”以查看是否可以在对象上执行操作;它只是向对象发送消息,如果该对象不接受该消息(通过方法声明或通过在#method_missing中处理它)它会发送消息。如果实际检查运行时确保操作可行,#method_missing将不起作用。
另外,应该注意的是,因为Ruby中的所有东西都是一个对象(我的意思是所有的东西都是),所以我不确定他所说的“不在一个意义上”是准确的。在Ruby中,你是一个对象或消息。
你为什么认为它们会一样 - 因为Rails开发者同时使用Ruby和Javascript? – 2010-11-26 07:26:50