Project

General

Profile

Feature #14223

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

Added by osyo (manga osyo) 4 months ago. Updated 3 months ago.

Status:
Closed
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

Associated revisions

Revision a6e5073c
Added by nobu (Nobuyoshi Nakada) 3 months ago

vm_args.c: to_proc refinements

  • vm_args.c (vm_to_proc): enable #to_proc by refinements at Proc passing as a block. patched by osyo (manga osyo). [Feature #14223]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62020 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 62020
Added by nobu (Nobuyoshi Nakada) 3 months ago

vm_args.c: to_proc refinements

  • vm_args.c (vm_to_proc): enable #to_proc by refinements at Proc passing as a block. patched by osyo (manga osyo). [Feature #14223]

Revision f7210deb
Added by nobu (Nobuyoshi Nakada) 3 months ago

NEWS: [Feature #14223] [ci skip]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62021 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 62021
Added by nobu (Nobuyoshi Nakada) 3 months ago

NEWS: [Feature #14223] [ci skip]

History

#1 Updated by osyo (manga osyo) 4 months ago

  • Description updated (diff)

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

賛成です。

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

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

nobu (Nobuyoshi Nakada) wrote:

賛成です。

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

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

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

#4 [ruby-dev:50422] Updated by matz (Yukihiro Matsumoto) 3 months ago

良さそうに思えます。取り込んでみましょう。

Matz.

#5 Updated by nobu (Nobuyoshi Nakada) 3 months ago

  • Status changed from Open to Closed

Applied in changeset trunk|r62020.


vm_args.c: to_proc refinements

  • vm_args.c (vm_to_proc): enable #to_proc by refinements at Proc passing as a block. patched by osyo (manga osyo). [Feature #14223]

#6 [ruby-dev:50434] Updated by osyo (manga osyo) 3 months ago

ありがとうございます!

Also available in: Atom PDF