Java';s static vs Ruby';自我
Java中的Java';s static vs Ruby';自我,java,ruby,Java,Ruby,Java中的static与Ruby中的self类似吗?不。Java的static与Ruby的self完全没有任何关系 相当于Ruby的self的Java是this。与Java的static等价的Ruby不存在 Java的static意味着方法是静态调度的,而不是动态调度的。在Ruby中,方法总是动态调度的static表示不在任何对象上调用该方法。在Ruby中,总是对对象调用方法。由于Java中的static方法与任何对象都没有关联,因此它们无法访问任何对象状态。在Ruby中,方法始终可以访问其关
static
与Ruby中的self
类似吗?不。Java的static
与Ruby的self
完全没有任何关系
相当于Ruby的self
的Java是this
。与Java的static
等价的Ruby不存在
Java的static
意味着方法是静态调度的,而不是动态调度的。在Ruby中,方法总是动态调度的static
表示不在任何对象上调用该方法。在Ruby中,总是对对象调用方法。由于Java中的static
方法与任何对象都没有关联,因此它们无法访问任何对象状态。在Ruby中,方法始终可以访问其关联实例的状态
简而言之,static
方法根本不是真正的方法,而是过程。Ruby没有过程,它只有(实例)方法
Ruby中没有任何构造可以与Java的静态方法相提并论,所谓的“类方法”不是静态方法。
当你这样做的时候
class MyClass
def self.do_something
# Do awesome stuff
end
end
self
仅指MyClass
。(如果您不相信我,请执行classmyclass;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\u string
调用do\u something
会是一种静态方法吗
因此,self
不会神奇地使一个方法成为静态的。但是您使用self在ruby中有一个静态行为。@vurte:您不能在ruby中有静态行为。行为总是包含在方法中,方法总是动态的。当然可以。。。我用了假词。不一样。Ruby开发人员中有很大一部分以前使用过Java。我的意思是,您可以模拟这种代码行为,Java开发人员通常使用“static”关键字(或singleton)和ruby加上“self”的元类功能。