私はシェフと働いており、私はRuby File.dirname()
クラスメソッドを使用する必要がある状況に遭遇しました。問題は、シェフは自分自身のChef::Resource::File
クラスであり、ruby_block
リソース内でコードを実行すると解決されます。名前の競合が発生した場合、どのようにして明示的にコア名前空間Fileクラスを参照できますか?Rubyでコアクラスを明示的に参照するには?
答えて
::
のクラス名の前に、つまり::File
を付けます。
シェフ自身がここで何かをオーバーロードしていないことに注意してください。問題は、あなたが::Chef::Resource::RubyBlock
であり、 "ファイル"でシンボルルックアップをしようとしていることです。 Ruby言語は上向きに検索し、が見つかる前にを見つけます。正しい解決策は::File.dirname
を使用することです。これは単純にRubyの機能(これは簡単には変更できません)です。
おそらく、ここで使用するのは適切な用語ではありませんでした。私はシェフが明らかにFileクラスを持っていたことを意味しました.Fileクラスは:: Fileクラスの代わりに解決していました。私は、複数の関数やメソッドに同じ名前を使用することと同じように、「オーバーロード」を意味しますが、使用可能な他のクラスに「踏みつぶす」クラスを参照するときは、より良い用語を使用することはできません。 –
いずれの場合も、訂正していただきありがとうございます。元の質問を編集して、私が経験していた振る舞いを表す別のモニカを使用しました。 –
素晴らしいです、ありがとうございます! –