[ruby-dev:50204] Re: [Ruby trunk Bug#13812][Assigned] Refinements で定義した to_s を String interpolation が呼んでくれない
From:
Tsukuru Tanimichi <ttanimichi@...>
Date:
2017-08-14 10:51:05 UTC
List:
ruby-dev #50204
あ、もしかしてバグでした?英語で 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/