読者です 読者をやめる 読者になる 読者になる

Ruby 2.4 で refinements の制限が緩和された

Ruby

さて、先日 Ruby 2.4 がリリースされました。

Ruby 2.4.0 リリース

[refinements の制限を緩和]

Ruby 2.4 では refinements の制限が緩和され、#send からも refine されているメソッドが呼び出せるようになりました。

class X; end

module Ex
    refine X do
        def homu
            p "homu"
        end
    end
end

using Ex

x = X.new

x.send :homu
# => "homu"

日頃から refinements クソだ!と言ってる勢としては『やっと対応されたか…』という感じ。
今後も使い勝手がよくなるようにここら辺の制限の調整がすすむといいですねえ…。
あとリリース前に Symbol#to_proc 内からも呼び出させるようになると聞いたんですが、こっちはまだエラーでした。

# Error: undefined method `homu' for #<X:0x005564eebeba60> (NoMethodError)
:homu.to_proc.call x