Project

General

Profile

Feature #14223

Refinements で定義した #to_proc が &hoge 時に呼ばれないのを緩和する提案

Added by osyo (manga osyo) about 1 month ago. Updated 25 days ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-dev:50384]

Description

Refinements に関する提案です。

現行の仕様では Refinements で定義された #to_proc&hoge 時に暗黙的に呼びだされません。

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 の実装に詳しい方がいればパッチもみていただけると助かります。

refinemetns_to_proc.patch (3.73 KB) refinemetns_to_proc.patch osyo (manga osyo), 12/22/2017 04:44 PM
refinemetns_to_proc.patch (3.26 KB) refinemetns_to_proc.patch osyo (manga osyo), 12/29/2017 06:45 AM

History

#1 Updated by osyo (manga osyo) about 1 month ago

  • Description updated (diff)

#2 [ruby-dev:50395] Updated by nobu (Nobuyoshi Nakada) 28 days ago

賛成です。

できれば不要なインデントの変更などは混ぜないでください。

#3 [ruby-dev:50405] Updated by osyo (manga osyo) 25 days ago

nobu (Nobuyoshi Nakada) wrote:

賛成です。

返信して頂き、ありがとうございます。

できれば不要なインデントの変更などは混ぜないでください。

ありがとうございます。修正しました。
これで問題ないでしょうか。

Also available in: Atom PDF