From: "shugo (Shugo Maeda)" Date: 2012-11-02T18:11:43+09:00 Subject: [ruby-dev:46362] [ruby-trunk - Bug #7262] module extension (#include/#prepend) in refinements Issue #7262 has been updated by shugo (Shugo Maeda). 匿名ユーザ wrote: > ということは、通常のメソッドを追加するだけであればrefinement > 内でのinclude/prependは、現状のままで有効であるという理解で > 正しいでしょうか。正しければ、この提案はcloseしてください。 prependの方はちょっと変な挙動になっているようなので少し考えさせてください。 class C def foo [:C] end end module M1 def foo super << :M1 end end module M2 def foo super << :M2 end end module M3 refine C do include M1 prepend M2 def foo super << :M3 end end end using M3 p C.new.foo #=> [:C, :M1, :M3, :M2, :M3] ---------------------------------------- Bug #7262: module extension (#include/#prepend) in refinements https://bugs.ruby-lang.org/issues/7262#change-32219 Author: matz (Yukihiro Matsumoto) Status: Open Priority: Normal Assignee: shugo (Shugo Maeda) Category: core Target version: 2.0.0 ruby -v: ruby 2.0.0dev (2012-11-01 trunk 37415) [i486-linux] refinementの中でモジュールのincludeやprependがしたい(かつ、そのスコープの範囲内だけで有効にしたい)なんて思ったんですが、きっと困難ですよね。 「無理」と思ったら遠慮なくrejectしてください。 module Experiment refine String do include Enumerable def foo; p :foo; end end end using Experiment "foo".foo "foo".each(&:p) Matz. -- http://bugs.ruby-lang.org/