Ruby 特征对比 Java
Ruby features vs Java
我是一名 Java 程序员,第一次使用 Ruby,我有几个问题想比较两种语言的某些功能。
构造函数的概念与 Ruby 相关吗?如果是,该行为与 Java 构造函数相比如何?
在 Java 中,我们通常为不同的 class 保留单独的 .java
文件(当未嵌套时)。 Ruby有没有类似的做法?还是每个 class 本身不如 Java 重要?
如何扩展 class(或 .rb
文件)?我想扩展 class 并在我的本地构造函数中调用 super
来初始化一些项目。
如何从另一个 .rb
文件中的不同 class 访问 .rb
文件中 class 的方法?
Ruby"gems"是否等同于Java包?
- 是的。差别不大。
- 是的。不过 ruby 中的自由度更高。 (如果你愿意,你甚至可以在多个文件中定义相同的 class....)除了 classes 之外,还有一些模块可以用作 mixin - 一种多重继承。
<
运算符用于继承另一个class。它是 ruby 的 extends
。在 subclass 构造函数中,您可以像在 Java. 中一样调用 super
- 实例方法的访问方式与 Ruby 中带点的方式相同。 Class 方法可以像在 Java 中一样在 class 名称后加一个点来访问。或者用双冒号。
- 没有。 Ruby 没有包裹。通常在 classes 周围使用模块来提供命名空间以避免冲突。 ruby 中的 Gem 更像是 java.
中的 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 中没有真正的包的概念,但你可以使用 modules
到 namespace 你的 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
文件同时包含 Set
和 SortedSet
class.
也可能是在多个文件中定义了一个class。比如上面提到的set.rb
不仅包含Set
和SortedSet
class,还包含Array
class的片段它有一个 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 包类似的东西,尽管人们可能会那样使用模块。
我是一名 Java 程序员,第一次使用 Ruby,我有几个问题想比较两种语言的某些功能。
构造函数的概念与 Ruby 相关吗?如果是,该行为与 Java 构造函数相比如何?
在 Java 中,我们通常为不同的 class 保留单独的
.java
文件(当未嵌套时)。 Ruby有没有类似的做法?还是每个 class 本身不如 Java 重要?如何扩展 class(或
.rb
文件)?我想扩展 class 并在我的本地构造函数中调用super
来初始化一些项目。如何从另一个
.rb
文件中的不同 class 访问.rb
文件中 class 的方法?Ruby"gems"是否等同于Java包?
- 是的。差别不大。
- 是的。不过 ruby 中的自由度更高。 (如果你愿意,你甚至可以在多个文件中定义相同的 class....)除了 classes 之外,还有一些模块可以用作 mixin - 一种多重继承。
<
运算符用于继承另一个class。它是 ruby 的extends
。在 subclass 构造函数中,您可以像在 Java. 中一样调用 super
- 实例方法的访问方式与 Ruby 中带点的方式相同。 Class 方法可以像在 Java 中一样在 class 名称后加一个点来访问。或者用双冒号。
- 没有。 Ruby 没有包裹。通常在 classes 周围使用模块来提供命名空间以避免冲突。 ruby 中的 Gem 更像是 java. 中的 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 中没有真正的包的概念,但你可以使用 modules
到 namespace 你的 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
文件同时包含 Set
和 SortedSet
class.
也可能是在多个文件中定义了一个class。比如上面提到的set.rb
不仅包含Set
和SortedSet
class,还包含Array
class的片段它有一个 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 包类似的东西,尽管人们可能会那样使用模块。