module X
end
module Y
end
module Z
#TODO include X replacement of including Y
#TODO include Y replacement of including X
end
rubyにunincludeキーワードが含まれていないという事実を回避する方法はありますか?Ruby 2.0モジュールを組み込んだ後、モジュールからモジュールを取り出すにはどうしたらいいですか?
module X
end
module Y
end
module Z
#TODO include X replacement of including Y
#TODO include Y replacement of including X
end
rubyにunincludeキーワードが含まれていないという事実を回避する方法はありますか?Ruby 2.0モジュールを組み込んだ後、モジュールからモジュールを取り出すにはどうしたらいいですか?
あなたは本当にこの種の機能が必要な場合は、おそらくrefinementsを使用することによってそれを行うことができます。
class Foo
end
module X
def x
puts 'x'
end
end
module Y
end
module R
refine Foo do
include X
include Y
end
end
# In a separate file or class
using R
# Foo now includes X and Y
Foo.new.x
# In a different file or class
# Foo no longer includes X and Y
Foo.new.x # NoMethodError
私はこれに満足しているわけではありませんが、両方のモジュールに同じメソッド名が含まれていればうまくいきます。
ファイルc.rb
module A
def me
puts "I am C"
end
def whosit?
puts "It's me, Becky"
end
end
module A
def me
puts "I am D"
end
end
そして
class X
load('c.rb')
include A
end
x = X.new
x.me # => I am C
x.whosit? # => It's me, Becky
load('d.rb')
x.me # => I am D
x.whosit? # => It's me, Becky !! Unwanted !!
load('c.rb')
x.me # => I am C
load()
d.rbファイルだけ、モジュールAを開き、変更および/またはコードを追加しています。そこには触れないものが残っています。 load()
は本当に明るくありません。私は基本的にeval()
を実行し、同じファイルを2回以上読み込むと気にする必要がないと思います。
これを使用するには、require
c.rbまたはd.rbも使用しないでください。
編集:以前の編集では、私はrequire_relative
についての観測を追加しました。反射では、私はそれが関連性も面白くもなく、その頭部でも外れているのを見る。
本物の答えは、Rubyでは1.xまたは2.xであることです。はありません。は一度含まれていればモジュールを取り除きます。しかし、誰かがどこかにRuby拡張モジュールを書いていて、モジュールを組み込むことができないことを知っています。
EDIT:OK、実際には、OPはWhat is the opposite of Ruby's include?の複製であるので、その答えに応じて@eliahとbanisterによって問題の図書館はのhttps://github.com/yrashk/rbmodexclとhttps://github.com/banister/mixology19
ボリスはミックスロジーと同じくらい古いです - 予想の問題と私はCのチャレンジまではありません、私はチェックインしていますdavogones&負荷はスマートな解決策です。洗練された洗練されたものです。もし洗練が私のために働くなら、間違いなくそれが必要であることを世界に知らせるでしょう! – zotherstupidguy
あなたは絶対に正しいです。私はそれらのライブラリを試していません。私はMatzが最初にこの機能を提供しなかった理由がなければならないと思う。 –
可能重複している[Rubyのの反対が含まれている何?] (http://stackoverflow.com/questions/2088211/what-is-the-opposite-of-rubys-include) –
@LoganSerman ruby 2.0答え私は – zotherstupidguy
を検索します* Yは*を含むXの置換を含みますか? –