[ruby-dev:50422] [Ruby trunk Feature#14223] Refinements で定義した #to_proc が &hoge 時に呼ばれないのを緩和する提案
From:
matz@...
Date:
2018-01-24 06:01:00 UTC
List:
ruby-dev #50422
Issue #14223 has been updated by matz (Yukihiro Matsumoto).
良さそうに思えます。取り込んでみましょう。
Matz.
----------------------------------------
Feature #14223: Refinements で定義した #to_proc が &hoge 時に呼ばれないのを緩和する提案
https://bugs.ruby-lang.org/issues/14223#change-69734
* Author: osyo (manga osyo)
* Status: Open
* Priority: Normal
* Assignee:
* Target version:
----------------------------------------
Refinements に関する提案です。
現行の仕様では Refinements で定義された `#to_proc` は `&hoge` 時に暗黙的に呼びだされません。
```ruby
using Module.new {
refine String do
def to_proc
proc { |it| it.send self }
end
def refine_method
"X#refine_method"
end
end
}
def func &block
end
p "upcase".refine_method
# => "X#refine_method"
p "upcase".to_proc.call "homu"
# => "HOMU"
# Error: wrong argument type X (expected Proc) (TypeError)
func &"upcase"
```
実行結果:https://wandbox.org/permlink/j8Hhavy7LoKYjrnz
最近の傾向として `Kernel#send` や式展開時の `#to_s` などで Refinements が有効になっています。
そういう意味では `&hoge` で暗黙的に呼び出される `#to_proc` も Refinements が有効になってもよいのではないでしょうか。
この件に関して、他の方の意見を聞かせていただけると助かります。
また、自分で実装を書いてみたのですが『とりあえず動いている』というレベルなので、Refinements の実装に詳しい方がいればパッチもみていただけると助かります。
---Files--------------------------------
refinemetns_to_proc.patch (3.73 KB)
refinemetns_to_proc.patch (3.26 KB)
--
https://bugs.ruby-lang.org/