Как вызвать метод из глобальной области видимости с тем же именем, что и метод экземпляра в ruby? - PullRequest
2 голосов
/ 07 марта 2012

Предположим, у меня есть глобальный метод hello(name) и метод экземпляра hello, например:

def hello(name)
  puts("Hello " + name)
end

class String
  def hello
    hello(self)         # does not work, see below
  end
end

Я хочу иметь возможность сказать

"world".hello()

но рубин не позволит мне. Жалуется

in `hello': wrong number of arguments (1 for 0) (ArgumentError)

Чего мне не хватает?

Ответы [ 3 ]

6 голосов
/ 07 марта 2012

Это должно работать

class String
  def hello
    Kernel.send(:hello,self)
  end
end
3 голосов
/ 07 марта 2012

Этот вопрос отвечает на этот точный вопрос: Как получить доступ к (затененной) глобальной функции в ruby ​​

По сути, def для глобального объекта создает закрытый метод для Objectтак что вам нужно прыгнуть через несколько обручей, чтобы позвонить.

1 голос
/ 09 мая 2012

Object.send(:hello,self) тоже работает.

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