RubyのFileクラスを拡張する事に関して

qiita.com

こちらの記事を参考にFileクラスを拡張しようと思い、下記の様なコードを実装

class File
alias_method :__open__, :open

def open()
'extend'
end
end

p File.open('test.txt')
#<File:test.txt>

 

この状態で実行すると既存のFile.openの動作が返ってきてしまう。

原因は上書きしたいopenメソッドの引数

def open()

def open(*args)

とし、パッケージ名の修飾とシグネチャを合わせる必要があるようです。
また、クラスメソッドを上書きするのでインスタンスメソッドではなくクラスメソッドを定義する必要があるようです。

なので下記の様に実装します。

class File
class << self
alias_method :__open__, :open
end

def self.open(*args)
'extend'
end
end

p File.open('test.txt')
#extend

すると拡張することが出来ました。

勉強になりました。