我有一個方法f(x)
,其中對參數x
的唯一要求是它實現了each
方法,而在每個迭代中依次產生一個字符串。重新定義SomeClass#每個只有一個實例
我可以用f
做
myfile = File.open('....')
f(myfile)
myfile.close
現在到了扭曲,產生一個文件的行:File#each
返回包括換行符文件的每一行,但我想f
使用chomped線的文件。我不想觸碰f
的執行情況。
一種解決方案可能會(我不知道這個解決方案是否是聲音相對於的each
使用)是繼承File
:
class ChompingFile < File
alias_method :file_each,:each
def each
file_each {|line| yield(line.chomp)}
end
end
myfile = ChompingFile.open('....')
f(myfile)
myfile.close
但是,我可以做同樣的沒有子,但修改實例myfile
?我第一次嘗試是
myfile = File.open(.....)
myfile.alias_method(:file_each,:each) # DOES NOT WORK
def myfile.each
file_each {|line| yield(line.chomp)}
end
f(myfile)
myfile.close
這給出了一個錯誤,那alias_method
是不確定的。我想我只有在self
被綁定到一個類而不是一個實例時纔可以使用它。
是否有可能實現我想要的? (而且,是明智這樣做呢?)
爲什麼'alias_method'跳舞?爲什麼不叫「超級」? –