function1、function2、function3というメソッドを持つモジュールがあるとします。私はfunction1とfunction2をインポートしたいが、function3はインポートしません。ルビーでこれを行う方法はありますか?Rubyモジュールからいくつかの関数だけをインポートするにはどうしたらいいですか?
7
A
答えて
6
あなたが望むメソッドを追加するだけのクリーンな方法があるのかどうかはわかりませんが、望ましくないメソッドはundef_method
を使って削除できます。
module Foo
def function1
end
def function2
end
def function3
end
end
module MiniFoo
include Foo
not_wanted_methods = Foo.instance_methods - %w(function1 function2)
not_wanted_methods.each {|m| undef_method m}
end
class Whatever
include MiniFoo
end
5
類似のソリューションですが、より自動化されています。私は何が起こることができる奇妙なことのどのような種類のか分からない。
module Foo
def m1
puts "Hello from m1"
end
def m2
puts "Hllo from m2"
end
end
class Module
alias :__include__ :include
def include(mod, *methods)
if methods.size > 0
tmp = mod.dup
new_mod = Object.const_set("Mod#{tmp.object_id}", tmp)
toremove = new_mod.instance_methods.reject { |m| methods.include? m.to_sym }
toremove.each { |m| new_mod.send(:undef_method, m) }
__include__(new_mod)
else
__include__(mod)
end
end
end
class Bar
include Foo
end
class Baz
include Foo, :m2
end
bar = Bar.new
baz = Baz.new
p bar.methods - Object.methods
p baz.methods - Object.methods
=>
["m1", "m2"]
["m2"]
4
あなたがモジュールのソースコードを制御しているとすれば、最もクリーンな方法は、モジュールをより多くのモジュールに分割することです。
モジュールの一部だけが必要な場合は、そのモジュールを、より少ない責任を持つ複数のモジュールにリファクタリングすることができます。
関連する問題
- 1. サブ関数からモジュールをmain()にインポートするにはどうしたらいいですか?
- 2. perlで関数をインポートするにはどうしたらいいですか?
- 3. 外部モジュールから外部変数と関数をインポートするにはどうすればいいですか?
- 4. 欠けているモジュールをmonkeyrunnerスクリプトにインポートするにはどうしたらいいですか?
- 5. インポートされたモジュールからインポート関数
- 6. Railsモデルから適切にモジュールと関数を呼び出すにはどうしたらいいですか?
- 7. パッケージ内からインポートできるモジュールを見つけるにはどうすればよいですか?
- 8. ある関数から別の関数に変数を渡すにはどうしたらいいですか?
- 9. ベクトルの一部から値を正しく見つけるにはどうしたらいいですか?
- 10. Pythonのインポートに失敗したパスを見つけるにはどうしたらいいですか?
- 11. Rubyでモジュールのインスタンス変数を初期化するにはどうしたらいいですか?
- 12. Ruby 2.0モジュールを組み込んだ後、モジュールからモジュールを取り出すにはどうしたらいいですか?
- 13. リッチテキストボックスを最大数の数字だけに制限するにはどうしたらいいですか? (キャップ)
- 14. システムのスレッドを見つけるにはどうしたらいいですか?
- 15. しばらく待ってから変数を変更するにはどうしたらいいですか?
- 16. iphone:Image Information APIを見つけるにはどうしたらいいですか?
- 17. ViewByTagを見つけるにはどうしたらいいですか?
- 18. Pythonでプライベートメソッドをインポートするにはどうしたらいいですか?
- 19. eclipseにjettyソースコードをインポートするにはどうしたらいいですか?
- 20. シンボルをインポートした後、__future__からシンボルを削除/アンインストールするにはどうしたらいいですか?
- 21. sqlite3モジュールをPython 2.4にインポートするにはどうしたらいいですか?
- 22. モジュール内でRuby/Railsのコア日付クラスにアクセスするにはどうしたらいいですか?
- 23. ヘルパー関数のドキュメントを隠すにはどうしたらいいですか?
- 24. Pythonのosモジュールから関数のカレントディレクトリを参照するにはどうすればいいですか?
- 25. Rubyでスクリプトを作成するにはどうしたらいいですか?
- 26. Magento:モジュール出力をキャッシュするにはどうしたらいいですか?
- 27. コンテキストメニューからエディタを開くにはどうしたらいいですか?
- 28. 線を描くにはどうしたらいいですか?
- 29. extern(C)関数リテラルを渡すにはどうしたらいいですか?
- 30. File :: Findで見つかったファイルを希望する関数内から開くにはどうしたらいいですか?
私はこのようなことを気にしていましたが、もっとクリーンな方法があると思いました。 – Geo