我重新定义实例方法的简单尝试无法正常工作
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
知道为什么吗?
我每次调用File#atime时都试图打印“helllllo”。即使alias old_atime atime
无效。
我在这里做错了吗?
答案 0 :(得分:1)
以上代码完美应用。放“helllllo”将“helllllo”写入您打开的文件中。放在用于写作的文件实例中。
只需致电 f.close ,然后在文本编辑器中打开您的文件即可。你可以看到内容。
答案 1 :(得分:0)
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
问题是'puts'在File中定义用于写入文件。除非在更具体的范围内定义,否则您希望使用内核。
答案 2 :(得分:0)
这应该可以正常工作,但是IO#puts
写入IO
对象本身,不是 STDOUT。换句话说,它正在写入文件。
在f.atime
内呼叫f.close
几次然后irb
,您应该看到每次拨打helllllo
时都会将atime
打印到该文件。< / p>
要打印到STDOUT,您可以使用$stdout.puts
或Kernel.puts
。