Ruby - Как переопределить методы класса? - PullRequest
11 голосов
/ 22 марта 2011

Как мне переопределить метод класса в ruby?

скажем, например, я хочу переопределить метод File.basename("C:\abc.txt") Как мне это сделать?

Это не работает:

class File
  alias_method :old_bn, :basename

  def basename(*args)
    puts "herro wolrd!"
    old_bn(*args)
  end
end

Я получаю : undefined method 'basename' for class 'File' (NameError)

Кстати, я использую JRuby

Ответы [ 2 ]

18 голосов
/ 22 марта 2011

alias_method предназначено для методов экземпляра. Но File.basename - это метод класса.

class File
  class << self
    alias_method :basename_without_hello, :basename

    def basename(*args)
      puts "hello world!"
      basename_without_hello(*args)
    end
  end
end

class << self оценивает все на «уровне класса» (Eigenklass) - поэтому вам не нужно писать self. (def self.basename) и alias_method относится к методам класса.

3 голосов
/ 22 марта 2011
class << File
  alias_method :old_bn, :basename
  def basename(f)
    puts "herro wolrd!"
    old_bn(*args)
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...