Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java';s static vs Ruby';自我_Java_Ruby - Fatal编程技术网

Java';s static vs Ruby';自我

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中,方法始终可以访问其关

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没有过程,它只有(实例)方法

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”的元类功能。