Ruby 特征对比 Java

Ruby features vs Java

我是一名 Java 程序员,第一次使用 Ruby,我有几个问题想比较两种语言的某些功能。

  1. 构造函数的概念与 Ruby 相关吗?如果是,该行为与 Java 构造函数相比如何?

  2. 在 Java 中,我们通常为不同的 class 保留单独的 .java 文件(当未嵌套时)。 Ruby有没有类似的做法?还是每个 class 本身不如 Java 重要?

  3. 如何扩展 class(或 .rb 文件)?我想扩展 class 并在我的本地构造函数中调用 super 来初始化一些项目。

  4. 如何从另一个 .rb 文件中的不同 class 访问 .rb 文件中 class 的方法?

  5. Ruby"gems"是否等同于Java包?

  1. 是的。差别不大。
  2. 是的。不过 ruby 中的自由度更高。 (如果你愿意,你甚至可以在多个文件中定义相同的 class....)除了 classes 之外,还有一些模块可以用作 mixin - 一种多重继承。
  3. <运算符用于继承另一个class。它是 ruby 的 extends。在 subclass 构造函数中,您可以像在 Java.
  4. 中一样调用 super
  5. 实例方法的访问方式与 Ruby 中带点的方式相同。 Class 方法可以像在 Java 中一样在 class 名称后加一个点来访问。或者用双冒号。
  6. 没有。 Ruby 没有包裹。通常在 classes 周围使用模块来提供命名空间以避免冲突。 ruby 中的 Gem 更像是 java.
  7. 中的 jar 文件(例如 maven 依赖项)

1) 是的。有构造函数的概念,其行为类似于 Java one。然而,构造函数方法在Ruby中调用initialize,而在Java中,构造函数与class本身同名。例如:

 class Foo
   def initialize
     # initialization logic here
   end
 end

2) 是的,最好的做法是为每个文件单独存储 classes,但它不受语言限制。

3) 对于继承,在Ruby中有不同的语法。请考虑以下代码:

class Parent
end

class Child < Parent
end

4)其实和Java很像,你用.表示对象上的方法:

class Person
  def name
    "Tester"
  end
end

p = Person.new
puts p.name

5) Ruby 中没有真正的包的概念,但你可以使用 modulesnamespace 你的 classes,例如:

module Foo1
  class Biz
  end
end

module Foo2
  class Biz
  end
end

b1 = Foo1::Biz.new
b2 = Foo2::Biz.new

Is constructor a relevant thing in Ruby? If yes, any change in behavior compared to Java?

不,Ruby 中没有构造函数。不像Java,它有三种不同的"methods"(实例方法、静态方法和构造函数),Ruby只有一种方法:实例方法。

In Java, we generally keep separate .java files for different classes(if not nested). Is the approach same in Ruby?

没有。您将为相关概念使用一个文件。它可能是单个 class,但话又说回来,它可能不是。例如,Ruby 标准库中的 set.rb 文件同时包含 SetSortedSet class.

也可能是在多个文件中定义了一个class。比如上面提到的set.rb不仅包含SetSortedSetclass,还包含Arrayclass的片段它有一个 to_set 方法将一个数组变成一个集合。

Or Class itself is not much relevant?

Ruby 是一种基于 class 的 OO 语言,classes 非常相关。

How can i extend one class (or a .rb file)? I would like to extend one class and call the super constructor inside my local constructor to initialize some items.

你不能"extend a file"。但是,您可以扩展 classes,就像在 Java.

中一样

How to access the Methods inside a class (.rb file) from another class (.rb file)?

同样,文件与此无关。

您可以在对象上调用方法,就像在几乎所有其他 OO 语言中一样,包括 Java。你没有 "access methods inside a class".

Is packages in Java and Gems in Ruby are the same thing? We used to have multiple packages in a project for tests, utilities etc.Is the approach same in Ruby as well?

没有。宝石更像是 Maven 人工制品。 Ruby 中没有与 Java 包类似的东西,尽管人们可能会那样使用模块。