Ява статична против себя Руби - PullRequest
6 голосов
/ 22 декабря 2010

Является ли static в Java похожим на self в Ruby?

Ответы [ 2 ]

8 голосов
/ 22 декабря 2010

Нет. Java static и Ruby self не имеют абсолютно никакого отношения друг к другу.

Java-эквивалент Ruby's self - this. Рубиновый эквивалент Java static не существует.

Java static означает, что метод отправляется статически, а не динамически. В Ruby методы всегда отправляются динамически. static означает, что метод не вызывается ни для одного объекта. В Ruby методы всегда вызываются для объектов. Поскольку static методы в Java не связаны ни с одним объектом, они не имеют доступа ни к какому состоянию объекта. В Ruby методы всегда имеют доступ к состоянию своего связанного экземпляра.

Короче говоря, static методы - это не совсем методы вообще , это процедуры. В Ruby нет процедур, есть только методы (экземпляра).

В * Ruby нет конструкции, которая даже отдаленно эквивалентна Java static.

2 голосов
/ 22 декабря 2010

Так называемые «методы класса» не являются статическими методами.

Когда вы делаете

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 магическим образом не делает метод статическим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...