26

我是一名刚开始学习 Ruby 的 Java 开发人员。Ruby 有任何原始类型吗?我似乎找不到他们的名单。如果不是,为什么?

4

4 回答 4

36

Ruby 的一个核心原则是所有数据都应该表示为对象。Smalltalk 等其他语言也遵循类似的范例。

这种设计的好处是它使 Ruby 更优雅,更容易学习。适用于对象的规则始终适用于所有 Ruby。

例如,当初学者第一次学习 Java 时,原始类型 int 和包装类 Integer 之间的区别可能会令人困惑。有时通过自动装箱在两者之间进行令人困惑的隐式转换,加剧了这种混乱。

那么为什么像 Java 或 C# 这样的语言会使用原始类型呢?答案是性能。与基元相比,创建对象会产生额外的开销。

于 2013-09-13T15:52:01.920 回答
19

Ruby 中没有原始数据类型。每个值都是一个对象,即使是文字也会变成对象:

    nil.class  #=> NilClass
   true.class  #=> TrueClass
  'foo'.class  #=> String
   :bar.class  #=> Symbol
    100.class  #=> Integer
   0x1a.class  #=> Integer
0b11010.class  #=> Integer
  123.4.class  #=> Float
1.234e2.class  #=> Float

这使您可以编写漂亮的代码,例如:

3.times do
  puts "Hello from Ruby"
end
于 2013-09-13T17:08:32.370 回答
6

引用关于 Ruby

在 Ruby 中,一切都是对象。每一点信息和代码都可以被赋予它们自己的属性和动作。

在许多语言中,数字和其他原始类型不是对象。Ruby 通过为所有类型提供方法和实例变量来遵循 Smalltalk 语言的影响。这简化了 Ruby 的使用,因为应用于对象的规则适用于所有 Ruby。

Java 选择保留一些原始类型主要是出于性能考虑,但您必须承认,并非每种类型都是类确实有时会使 Java 代码有些尴尬。Ruby 的理念是让程序员的日子更轻松,我认为让一切都成为对象是实现这一目标的一种方式。

于 2013-09-13T15:54:02.950 回答
3

ruby 中没有原始数据类型。因为 ruby​​ 是一种纯粹的面向对象的语言。基本上,像其他语言一样有数据类型,但这些数据类型是java中的集合之类的类。

如果您定义任何字符串值,例如“Akshay”,那么它就是一个对象。您可以查看下图,其中“Akshay”的 object_id 为 30300。请单击链接以检查 rails 控制台上的对象。从图像中的更多示例中,我们可以确定除关键字之外的所有内容都是 ruby​​ 中的对象。

所以在这里我们可以得出结论,ruby 将这些原始数据类型转换为类。

具有原始数据作为对象的 Ruby 控制台

于 2021-02-12T12:02:19.783 回答