もしかしてバグでした?英語で ruby-core に投げた方が良かったかな。
ruby-lang.org のメーリスに投げるの初めてで、慣習がよく分かってないです、すみません。


2017-08-14 19:17 GMT+09:00  <hsbt / ruby-lang.org>:
> 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/



-- 
谷道 創(Tsukuru Tanimichi)
https://ttanimichi.com/