Как изменить унаследованные или включенные методы publi c на private - PullRequest
1 голос
/ 17 января 2020

Возможно, он существует, но я не смог найти ответ на этот вопрос через Google или через переполнение стека.

Я хочу изменить статус доступа для подмножества, или всех унаследованных, или включенных из модуля, методов publi c на приватный или защищенный. Возможно ли это и как мне это сделать? Просто чтобы убедиться, что это понятно, пример:

class X
public
  def foo
    puts "I am foo"
  end
end

class Y < X
  <magic-phrase-to-make-foo-private>
  #...
end

x = X.new
x.foo # ("I am foo")
y = Y.new
y.foo # (Kablam!)

Ответы [ 2 ]

4 голосов
/ 17 января 2020

Вы можете сказать, что foo - это закрытый метод, используя синтаксис private :method_name:

class X
public
  def foo
    puts "I am foo"
  end
end

class Y < X
  private :foo
end

x = X.new
x.foo # ("I am foo")
y = Y.new
y.foo # NoMethodError (private method `foo' called for #<Y:0x00007fe1e210bc58>)
0 голосов
/ 18 января 2020

В Ruby видимость методов изменяется с помощью методов Module#private, Module#protected и Module#public. Все, что вам нужно сделать, это

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