Rubyのrefineで定数を定義したいです。
Ruby の refinements の使い途 - Qiita
の記事には、以下のように書いていました。
refine はメソッドだ。引数として,拡張したいモジュールを与える。もちろんクラスはモジュールの一種だから,クラスを与えることもできる。
そして,ブロックの中でメソッドを定義する。いや,メソッドだけでなく定数などを定義したっていい。
refineのブロックの中で定数も定義できるようなので、簡単なプログラムでやってみましたがwarningが発生していまい、期待の出力がされませんでした。
rb
1module Refinements 2 refine String do 3 CONSTANT = 'constant' 4 def foo 5 CONSTANT 6 end 7 end 8end 9 10using Refinements 11puts 'a'.foo
Main.rb:3: warning: not defined at the refinement, but at the outer class/module
どのようにすれば、refineで定数も定義できるのか教えていただきたいです。
warningの意味としては「refineの中で定義するのではなく、外のモジュールで定義しなさい」と意味でしょうか?
確かに、そのようにすればうまくいきました。
rb
1module Refinements 2 CONSTANT = 'constant' 3 refine String do 4 def foo 5 CONSTANT 6 end 7 end 8end 9 10using Refinements 11puts 'a'.foo 12#=> constant
その場合、上の記事は間違いということになると思いますが。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/07 09:04 編集
2018/11/07 09:11
2018/11/07 09:44
2018/11/07 11:28
2018/11/07 12:13
2018/11/07 21:18
2018/11/08 09:01