Ruby功能与Java

时间:2015-07-16 12:30:32

标签: java ruby rubygems

我是第一次使用Ruby的Java程序员,我对两种语言之间的某些功能进行比较有几点疑问。

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

  2. 在Java中,我们通常为不同的类(不嵌套时)保留单独的.java文件。 Ruby中有类似的做法吗?或者每个类本身不像Java那么重要?

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

  4. 如何从另一个.rb文件中的其他类访问.rb文件中的类的方法?

  5. Ruby" gems"相当于Java包?

3 个答案:

答案 0 :(得分:2)

  1. 是。没什么大不同。
  2. 是。虽然红宝石更自由。 (如果你愿意,你甚至可以在几个文件中定义相同的类....)除了类之外,还有可以用作mixin的模块 - 一种多重继承。
  3. <运算符用于继承另一个类。它是红宝石的extends。在子类构造函数中,您可以像在Java中一样调用super。
  4. 实例方法的访问方式与Ruby中的点一样。可以像在Java中一样使用类名后面的点来访问类方法。或者用双结肠。
  5. 否。 Ruby没有包。通常,在类周围使用模块来提供命名空间以避免冲突。 ruby中的gem更像是java文件中的jar文件(例如maven依赖项)。

答案 1 :(得分:2)

1)是的。有一个构造函数的概念,其行为类似于 Java one 。但是,构造函数方法在Ruby中称为initialize,在Java中,构造函数与类本身具有相同的名称。例如:

 class Foo
   def initialize
     # initialization logic here
   end
 end

2)是的,它被认为是每个文件存储类的最佳实践 - 单独使用,但它不受语言限制。

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命名空间你的类,例如:

module Foo1
  class Biz
  end
end

module Foo2
  class Biz
  end
end

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

答案 2 :(得分:0)

  

构造函数在Ruby中是一个相关的东西吗?如果是,那么与Java相比,行为有何变化?

不,Ruby中没有构造函数。与Java有三种不同的“方法”(实例方法,静态方法和构造函数)不同,Ruby只有一种方法:实例方法。

  

在Java中,我们通常为不同的类(如果不是嵌套的)保留单独的.java文件。 Ruby中的方法是否相同?

没有。您可以将一个文件用于相关概念。它可能是一个单独的类,但话说再说,它可能不是。例如,Ruby标准库中的set.rb文件包含SetSortedSet类。

也可能是在多个文件中定义了单个类。例如,上述set.rb不仅包含SetSortedSet类,还包含Array类的片段to_set将数组转换为集合的方法。

  

或类本身没有多大关系?

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

  

如何扩展一个类(或.rb文件)?我想扩展一个类,并在我的本地构造函数中调用超级构造函数来初始化一些项。

您无法“扩展文件”。但是,您可以扩展类,就像在Java中一样。

  

如何从另一个类(.rb文件)访问类(.rb文件)中的方法?

同样,文件与此无关。

您可以在对象上调用方法,就像几乎所有其他OO语言一样,包括Java。你没有“访问类中的方法”。

  

Ruby中的Java和Gems中的包是一样的吗?我们曾经在一个项目中有多个包用于测试,实用程序等。在Ruby中它的方法也一样吗?

没有。宝石更像是Maven的文物。在Ruby中没有类似于Java包,尽管可以使用模块。

相关问题