Переопределение одиночного метода родителя - PullRequest
1 голос
/ 06 марта 2019

В C # обычный класс не может наследоваться от статического класса.Подобный случай для Ruby выглядит следующим образом:

class Foo
  class << self
    def test
      "this is test"
    end
  end
end

class Bar < Foo
  def test
    puts super
  end
end

Bar.new.test # >> error

Есть ли способ для обычного класса Bar наследовать от Foo и переопределять test?

1 Ответ

1 голос
/ 06 марта 2019

Есть ли способ для Bar наследовать от Foo

Вы правильно сделали эту часть

и переопределить test?

Вам необходимо определить Bar.test как метод класса, но вы написали определение метода экземпляра (и вызов).Попробуйте

class Bar < Foo
  class << self
    def test
      super + ", man"
    end
  end
end

Bar.test
#=> "this is a test, man"

В Ruby не существует статического класса или метода, поэтому вызов метода экземпляра Bar.new.test никогда не будет ссылаться на то же, что и вызов метода класса Bar.test, так какв языках с концепцией статических методов.

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