rubyのクラス内でモジュールから一部のメソッドだけincludeする
rubyのクラス内で、あるモジュールをincludeすると、そこに含まれるメソッドが、すでに存在する(superclassの)メソッドと同名なため、superclassの方のメソッドが使えずに困っています。例えばpythonなら
python
1from module import func 2 3import module 4module.func
のように、モジュールから一部の関数だけ持ってきたり、あるいはそもそもmoduleをimportした時には、ある名前空間に入った状態てimportされるので、名前の衝突で悩むことはあまりないのですが...
該当のソースコード
最後のところで、class Aのfuncを呼び出したいのですが、良い方法はありますか。
Ruby
1class A 2 def func1 3 puts 'hello from A!' 4 end 5end 6 7module B 8 def func1 9 puts 'hello from B!' 10 end 11 def func2 12 puts 'good bye!' 13 end 14end 15 16class C < A 17 include B 18 def some_method 19 func1 20 func2 21 end 22end 23 24c = C.new 25c.some_method # 結果 : hello from B!; good bye!
なお、ここではサンプルを作りましたが、実際には以下のような状況で困りました。railsでsidekiqを使い、かつその状況を自作のloggerに記録したいのですが、コントローラで以下のようにすると、4行めのRailsというのがSidekiq::Railsを参照してしまいます。
Ruby
1class MySpecialController < ApplicationController 2 include Sidekiq 3 def index 4 Rails.applicatian.config.my_special_logger.info "default schedule " + Sidekiq.get_schedule['worker']['every'][0] 5 MySpecialWorker.perform_async 6 end 7end
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/07 03:17