eval in Ruby
942 ワード
今日、前に作ったツールを私のツールフレームワークに統合した結果、問題が発生しました.私のツールとフレームワークはrubyで書かれており、フレームワークはevalメソッドで登録されたツールを呼び出します.私のツールにはArrayに対するmonkey patchがあります.
私が単独でツールを実行したとき、すべて正常でした.しかし、統合後にエラーが発生しました:module Tools.Methods.Arrayにはメソッドzipがありません.
カスタムmoduleで呼び出したevalだったのか.入ってきたstringは私のツールの元のファイルで、monkey patchはArrayのようなクラスを見つけていません.zipメソッドも見つかりません
コードをこのように変更すればいいです.
class Array do
alias old_zip zip
def zip(another_array)
if another_array and another_array.size > size
(another_array.size-size).times{ self << nil }
end
old_zip(another_array)
end
end
私が単独でツールを実行したとき、すべて正常でした.しかし、統合後にエラーが発生しました:module Tools.Methods.Arrayにはメソッドzipがありません.
カスタムmoduleで呼び出したevalだったのか.入ってきたstringは私のツールの元のファイルで、monkey patchはArrayのようなクラスを見つけていません.zipメソッドも見つかりません
コードをこのように変更すればいいです.
Array.class_eval do
alias old_zip zip
def zip(another_array)
if another_array and another_array.size > size
(another_array.size-size).times{ self << nil }
end
old_zip(another_array)
end
end