From: Tsukuru Tanimichi Date: 2017-08-14T19:51:05+09:00 Subject: [ruby-dev:50204] Re: [Ruby trunk Bug#13812][Assigned] Refinements で定義した to_s を String interpolation が呼んでくれない あ、もしかしてバグでした?英語で ruby-core に投げた方が良かったかな。 ruby-lang.org のメーリスに投げるの初めてで、慣習がよく分かってないです、すみません。 2017-08-14 19:17 GMT+09:00 : > 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 #=> # > C.new.c3 #=> # > ``` > > c1, c2, c3 ともに "b" となることを想像していました。 > > -- > 谷道 創(Tsukuru Tanimichi) > https://ttanimichi.com/ > > > > -- > https://bugs.ruby-lang.org/ -- 谷道 創(Tsukuru Tanimichi) https://ttanimichi.com/