Java中的static
和Ruby中的self
一样吗?
答案 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
不会神奇地使方法成为静态。