Actions
Feature #14223
closedRefinements で定義した #to_proc が &hoge 時に呼ばれないのを緩和する提案
Status:
Closed
Assignee:
-
Target version:
-
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 の実装に詳しい方がいればパッチもみていただけると助かります。
Files
Updated by nobu (Nobuyoshi Nakada) almost 7 years ago
賛成です。
できれば不要なインデントの変更などは混ぜないでください。
Updated by osyo (manga osyo) almost 7 years ago
nobu (Nobuyoshi Nakada) wrote:
賛成です。
返信して頂き、ありがとうございます。
できれば不要なインデントの変更などは混ぜないでください。
ありがとうございます。修正しました。
これで問題ないでしょうか。
Updated by matz (Yukihiro Matsumoto) almost 7 years ago
良さそうに思えます。取り込んでみましょう。
Matz.
Updated by nobu (Nobuyoshi Nakada) almost 7 years 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]
Actions
Like0
Like0Like0Like0Like0Like0Like0