From: info+ruby@... Date: 2017-09-17T13:05:06+00:00 Subject: [ruby-dev:50253] [Ruby trunk Feature#13812] Refinements で定義した to_s を String interpolation が呼んでくれない Issue #13812 has been updated by ttanimichi (Tsukuru Tanimichi). hsbt さん RubyKaigi でお忙しいところすみません、 hsbt さんに聞くのが適切か分かりませんが、もしよろしければ相談させてください。 本件、すでに nobu さんのパッチがあり、 まつもとさんの承認も得られていますが、どうされますか? 仕様変更の議論なので英語でやった方が良かったかなとも思うんですが、 既にまつもとさんの承認も得られていますし、こういう場合って普段どうされてます? また、英語で議論する場合、 > 英語で新規にチケットを起票した方が良いでしょうか? > それともこのチケットの Title と Description を編集して英語に書き換えた方がいいですか? これってどちらが良いでしょうか? 個人的な想いとしては、2.5 リリースに間に合うと嬉しいです。 ---------------------------------------- Feature #13812: Refinements で定義した to_s を String interpolation が呼んでくれない https://bugs.ruby-lang.org/issues/13812#change-66733 * Author: Anonymous * Status: Assigned * Priority: Normal * Assignee: matz (Yukihiro Matsumoto) * Target version: ---------------------------------------- はじめまして。谷道と申します。 既出だったらすみません。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 #=> # C.new.c3 #=> # ``` c1, c2, c3 ともに "b" となることを想像していました。 -- 谷道 創(Tsukuru Tanimichi) https://ttanimichi.com/ -- https://bugs.ruby-lang.org/