【发布时间】:2021-03-20 17:33:47
【问题描述】:
我是一名刚开始学习 Ruby 的 Java 开发人员。 Ruby 有任何原始类型吗?我似乎找不到他们的名单。如果不是,为什么?
【问题讨论】:
-
我知道这并不能回答您的问题,但是如果您不熟悉 Ruby,可以在 (www.codecademy.com/tracks/ruby) 上找到关于 Codecademy 的精彩教程。希望通过阅读这些教程,您可以节省大量的故障排除时间!
我是一名刚开始学习 Ruby 的 Java 开发人员。 Ruby 有任何原始类型吗?我似乎找不到他们的名单。如果不是,为什么?
【问题讨论】:
Ruby 的一个核心原则是所有数据都应该表示为对象。 Smalltalk 等其他语言也遵循类似的范例。
这种设计的好处是它使 Ruby 更优雅,更容易学习。适用于对象的规则始终适用于所有 Ruby。
例如,当初学者第一次学习 Java 时,原始类型 int 和包装类 Integer 之间的区别可能会令人困惑。有时通过自动装箱在两者之间进行令人困惑的隐式转换会加剧这种混乱。
那么为什么像 Java 或 C# 这样的语言会使用原始类型呢?答案是性能。与基元相比,创建对象会产生额外的开销。
【讨论】:
5.object_id 与 5902123.object_id 不同。这是两个不同的 Fixnum 对象。
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
【讨论】:
在 Ruby 中,一切都是对象。每一点信息和代码都可以被赋予它们自己的属性和动作。
在许多语言中,数字和其他基本类型都不是对象。 Ruby 通过为所有类型提供方法和实例变量来遵循 Smalltalk 语言的影响。这简化了 Ruby 的使用,因为适用于对象的规则适用于所有 Ruby。
Java 选择保留一些原始类型主要是为了提高性能,但您必须承认,并非每种类型都是类确实有时会使 Java 代码有些尴尬。 Ruby 的理念是让程序员的日子更轻松,我认为将所有东西都变成对象是实现这一目标的一种方式。
【讨论】:
=> 是一个对象吗?奇怪的是,在 Ruby 中我可以做 1.method(:+).class 并得到 Method,但 {}.method(:=>).class 是一个语法错误。就好像……不是所有的东西都是对象?
=> 不是哈希方法。但是{}.method(:[]).class 返回Method,正如您所料。所以不,不是 Ruby 中的 everything 是一个对象,如果你在“所有”中包含奇数的语法、空格、保留字等——那就有点期待了。
ruby 中没有原始数据类型。因为 ruby 是一种纯粹的面向对象的语言。基本上,像其他语言一样有数据类型,但是这些数据类型是java中的集合之类的类。
如果您定义任何字符串值,例如“Akshay”,那么它就是一个对象。您可以查看下图,其中“Akshay”的 object_id 为 30300。请单击链接以检查 rails 控制台上的对象。从图像中的更多示例中,我们可以确定除关键字之外的所有内容都是 ruby 中的对象。
所以这里我们可以得出结论 ruby 将这些原始数据类型转换为类。
【讨论】: