Java的静态与Ruby的自我

时间:2010-12-22 05:02:10

标签: java ruby

Java中的static和Ruby中的self一样吗?

2 个答案:

答案 0 :(得分:8)

没有。 Java的static和Ruby的self绝对没有任何关系。

与Ruby的self等效的Java是this。与Java的static等效的Ruby不存在。

Java static表示该方法是静态调度而不是动态调度。在Ruby中,方法总是动态调度。 static表示不在任何对象上调用该方法。在Ruby中,方法始终在对象上调用。由于Java中的static方法与任何对象都没有关联,因此它们无法访问任何对象状态。在Ruby中,方法总是可以访问其关联实例的状态。

简而言之,static方法实际上不是方法,它们是程序。 Ruby没有程序,只有(实例)方法。

在Ruby中没有构造,甚至可以远程等同于Java的static

答案 1 :(得分:2)

所谓的“类方法”不是静态方法。

当你这样做时

class MyClass
  def self.do_something
    # Do awesome stuff
  end
end

self仅指MyClass。 (如果您不相信我,请class MyClass; puts self.inspect; end!)您可以将self替换为MyClass,甚至可以替换为MyClass类的内容,并且您将获得相同的结果。

你可以做到

class MyClass
end

foo = MyClass

def foo.do_something
  # Do awesome stuff
end

你会得到相同的结果。

并且,你可以对非类别的东西做同样的事情

my_string = "HAI WORLD"

def my_string.do_something
  # Yet more awesome stuff
end

然后您可以致电my_string.do_something

do_something上调用my_string是静态方法吗?

所以self不会神奇地使方法成为静态。