Ruby - переопределение методов экземпляра не работает - PullRequest
2 голосов
/ 22 марта 2011

Моя простая попытка переопределить методы экземпляра не работает

class File
  alias_method :old_atime, :atime
  def atime(*args)
    puts "helllllo"
    old_atime(*args)
  end
end


f = File.new("C:\\abc.txt","w")
puts f.atime

Есть идеи почему?

Я пытаюсь напечатать "helllllo" каждый раз, когда вызывается File # atime.Даже alias old_atime atime не работает.

Что-то я здесь не так делаю?

Ответы [ 3 ]

1 голос
/ 22 марта 2011

Над кодом работает отлично, как и должно быть.Помещает «helllllo» записывает «helllllo» в ваш открытый файл.Вставляет экземпляр файла, предназначенный для записи.

Просто позвоните f.close и откройте свой файл в текстовом редакторе.Вы можете увидеть содержание.

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

Это должно работать нормально, но IO#puts пишет в сам объект IO, не STDOUT. Другими словами, это запись в файл.

Вызовите f.atime несколько раз, а затем f.close в irb, и вы должны увидеть, как он печатает helllllo в файл для каждого вызова atime.

Для печати в STDOUT вы можете использовать $stdout.puts или Kernel.puts.

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

Да, Рамеш прав. Попробуйте это:

class File
  alias_method :old_atime, :atime
  def atime(*args)
    Kernel.puts "helllllo"   # <---- Kernel method
    old_atime(*args)
  end
end


f = File.new("C:\\abc.txt","w")
puts f.atime

Проблема в том, что для записи в файлы в файле определено значение «пут». Требуется ядро, которое используется, если не определено в более конкретной области.

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