Issue #13812 has been updated by hsbt (Hiroshi SHIBATA).

Status changed from Open to Assigned
Assignee set to shugo (Shugo Maeda)

----------------------------------------
Bug #13812: Refinements у臂to_s String interpolation が呼んでくれない
https://bugs.ruby-lang.org/issues/13812#change-66168

* Author: Anonymous
* Status: Assigned
* Priority: Normal
* Assignee: shugo (Shugo Maeda)
* Target version: 
* ruby -v: 
* Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
 はじめまして。谷道と申します。
 
 既出だったらすみません。bugs.ruby-lang.org でも検索したんですが
 それっぽいチケットが見当たらなかったので確認させてください。
 
 Refinements で定義した to_s を String interpolation が呼んでくれないのですが、これって仕様なんですかね?
 String literal の評価が using B しているスコープの外で行われる、ということでしょうか。
 
 ```
 $ ruby -v
 ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]
 ```
 
 ```ruby
 class A
 end
 
 module B
 refine A do
 def to_s
 'b'
 end
 end
 end
 
 class C
 using B
 
 def initialize
 @a = A.new
 end
 
 def c1
 @a.to_s
 end
 
 def c2
 "#{@a}"
 end
 
 def c3
 puts "#{@a}"
 end
 end
 
 puts C.new.c1 #=> b
 puts C.new.c2 #=> #<A:0x007fb05ba3e928>
 C.new.c3 #=> #<A:0x007fb05ba3e7e8>
 ```
 
 c1, c2, c3 ともに "b" となることを想像していました。
 
 -- 
 谷道 創(Tsukuru Tanimichi)
 https://ttanimichi.com/



-- 
https://bugs.ruby-lang.org/