eval in Ruby

942 ワード

今日、前に作ったツールを私のツールフレームワークに統合した結果、問題が発生しました.私のツールとフレームワークはrubyで書かれており、フレームワークはevalメソッドで登録されたツールを呼び出します.私のツールにはArrayに対するmonkey patchがあります.
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