6. 書き方
module MyScope
refine String do
def double_string
self + self
end
end
end
class ScopeUser
using MyScope
def run_refined
'sample string'.double_string
end
end
p ScopeUser.new.run_refined # => "sample stringsample string"
p 'outer string'.double_string
NoMethodError: undefined method `double_string' for "outer
string":String
from (irb):3
from /usr/local/bin/irb:12:in `<main>'
19. refineされるクラスのメソッド
● refinementsはSelectorNamespace
● refineされるクラスのメソッドは、通常refineで書き換えられたメソッドを呼び出すこと
が出来ない
class A
def foo
bar
end
def bar
'A#bar'
end
end
module RefineA
refine A do
def bar
'RefineA#bar'
end
end
end
def test
using RefineA
A.new.foo
end
p test # => 'A#bar'